提问者:小点点

Firebase实时数据库多路径更新vs fi恢复数据库批量写入


我有一个应用程序,每个Collection包含数百万个文档。我的应用程序是使用AndroidJava与Fi恢复数据库创建的。问题是Fi恢复的批量写入最多只能更新500个文档。如果我需要更新超过500个文档怎么办?我不能仅仅为了解决我的问题而创建多个批量写入,因为我使用的是带有Java的Android,Java中没有Promise或AsyncTask之类的东西。因此,创建多个批处理写入不会返回Promise。所以我无法保证我的数据与批处理写入的一致性。

我读到Firebase实时数据库的多路径更新,它确实可以解决我的问题,因为它没有文档限制。但是实时数据库的问题是它不支持对多个where子句的查询,例如FiRecovery数据库中的子句。

在我想要支持多个where子句并更新多达数百万个数据的情况下,我应该使用哪个数据库?

请帮助我,因为我现在很困惑,如果我的Firebase问题无法解决,我计划迁移到SQL。


共2个答案

匿名用户

我不能创建多个批处理写入只是为了解决我的问题,因为我使用Android与Java和没有这样的东西作为promise或AsyncTask在Java。

Java中没有Promise的概念。但是,AsyncTask是存在的,但是正如您所见,即使从30级开始,它也API弃用。

因此,创建多个批处理写入不会返回Promise。

它不能返回Promise,它将返回一个Task。当您调用WriteBatch#提交()时,返回的对象类型是Task

如果您不想使用这种非常简单的方法,那么您应该考虑使用RxJava库。

如果你想提高你在Android开发方面的技能,我强烈建议你学习静态编程语言。所以当谈到静态编程语言时,我认为最好的特性之一是静态编程语言Coroutines。

对于简单的Fi恢复读取,我建议您阅读以下资源:

  • 如何使用get()从Cloud Fi恢复中读取数据?

当涉及到更新数百万个文档时,在你的Android应用程序的代码中这样做听起来并不是一个好的解决方案。在我看来,你最好的选择是使用Firebase的云函数。因此,你将能够使用多个来创建一个查询,其中EqualTo()调用,一切都将在服务器上执行。

匿名用户

您仍然可以创建多个批次并单独运行每个批次。Promise. all()本质上同时运行所有这些Promise,但每个批次最终都会返回一个单独的Promise。如果您不想在应用程序端处理此问题,那么您可以使用Cloud Functions并在服务器端运行它,以防出现任何错误,您可以根据需要恢复添加的任何文档。

我读到了Firebase实时数据库的多路径更新,它确实可以解决我的问题,因为它没有记录的限制

限制记录在留档中。对于REST API,每个写操作中的总数据应小于256MB,对于SDK,应小于16MB

在我想要支持多个where子句并更新多达数百万个数据的情况下,我应该使用哪个数据库?

这完全取决于您需要什么查询。读操作比写操作更频繁吗?Fi恢复可能是一个更好的选择,因为它可以支持具有多个约束的查询,就像您的问题一样。