离线缓存数据的Firestore定价说明

And*_*ler 8 firebase google-cloud-firestore

Firestore会向我收取对本地缓存的数据的读取查询的费用,这对我来说似乎很奇怪,但在Firestore定价文档中,我找不到与之相反的任何说明。如果我强制Firebase进入脱机模式,然后对本地缓存的数据执行读取操作,我是否仍要为检索到的每个单独实体收费?

其次,我的应用程序中的脱机用户将多个小更新写入单个实体。我希望每次都将更改保留在本地(以防它们退出应用程序),但最终只需要最终一致地保存到云中即可。当用户重新连接到Internet并且Firestore刷新了本地更改时,是否将向我收取对该实体的单个写入请求,或者update在脱机时对每个调用收取一次?

Firestore可能很适合我的用例,但是如果离线读写的收费与在线收费相同,那将不是一个负担得起的选择。

Ale*_*amo 9

正如官方文档所说,

Cloud Firestore 支持离线数据持久化。此功能会缓存您的应用正在使用的 Cloud Firestore 数据的副本,以便您的应用可以在设备离线时访问这些数据。您可以写入、读取、侦听和查询缓存数据。当设备重新联机时,Cloud Firestore 会将您的应用所做的任何本地更改同步到远程存储在 Cloud Firestore 中的数据。

因此,每个使用 Firestore 数据库并设置PersistenceEnabled为 true 的客户端都会维护自己的内部(本地)版本的数据库。当数据被插入/更新时,它首先被写入数据库的这个本地版本。因此,对数据库的所有写入都会添加到queue. 这意味着一旦您重新上线,存储在那里的所有操作都将在 Firebase 服务器上提交。这也意味着这些操作将被视为独立的操作而不是整体。

但请记住,不要将 Firestore 用作仅离线数据库。它实际上是作为一个在线数据库设计的,可以在短到中途断开连接的情况下工作。离线时,它将保持写入操作队列。随着这个队列的增长,本地操作和应用程序启动会变慢。没什么大不了的,但随着时间的推移,这些可能会加起来。

如果Google Cloud Firestore定价模型不太适合您的用例,则使用Firebase Realtime Database. 正如Firebase 官方博客中的这篇文章中所述,您仍然可能想要使用实时数据库的原因之一是:

正如我们上面提到的,Cloud Firestore 的定价模型意味着每个客户端每秒执行大量小读取和写入的应用程序可能比实时数据库中执行类似的应用程序昂贵得多。

因此,选择哪个选项取决于您。

  • @NishanthSreedhara 您无需为本地缓存数据查询付费,但是当您重新上线时,队列中的每个操作都将作为单独的写入操作收费。 (10认同)
  • @AndyMiller 接受的答案并没有真正回答您的问题“我们是否需要为本地缓存数据查询付费”。不过,它提供了许多其他有用的信息。你找到答案了吗? (3认同)
  • 感谢您及时的回复。Firestore 将按顺序重放事务的写入是有意义的,因为它旨在成为在线优先数据存储(而不是像 Pouch 或 Realm 那样离线优先)。您知道本地读取是否与网络读取定价相同的答案吗?我可能会保留我自己的本地缓存,我可以定期刷新到 Firestore,但现在我会考虑回答这个问题 (2认同)

Hos*_*ein 5

根据如果您想使用 Cloud Firestore 完全离线工作,您可以通过以下方式禁用网络:

FirebaseFirestore.getInstance().disableNetwork()
Run Code Online (Sandbox Code Playgroud)

但是 firestore 会导致第一个用户获取请求的客户端脱机错误,您必须将此错误视为空响应。