针对脱机缓存数据的Firestore定价说明

时间:2017-11-08 11:37:09

标签: firebase google-cloud-firestore

对我而言,Firestore会向我收取本地缓存数据的读取查询,这似乎很奇怪,但我在Firestore Pricing document中找不到任何相反的澄清。如果我强制Firebase进入离线模式,然后对我本地缓存的数据执行读取操作,那么我仍然需要为我检索的每个实体付费吗?

其次,我的应用中的离线用户会向单个实体写入许多小更新。我希望每次更改都在本地持久化(如果他们退出应用程序),但我最终只需要一致的保存到云端。当用户重新连接到互联网并且Firestore刷新本地更改时,是否会向该实体收取一次写入请求,或者我在离线时每update次调用一次?

Firestore可能非常适合我的用例,但如果离线读取和写入的收费与在线收费相同,那么它将不是一个经济实惠的选择。

2 个答案:

答案 0 :(得分:1)

正如offical documentation所说,

  

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

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

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

如果Google Cloud Firestore定价模型不能很好地适合您的用例,请使用Firebase Realtime Database。正如Firebase官方博客的post中所提到的,您仍可能想要使用实时数据库的原因之一是:

  

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

因此,您可以选择哪个选项。

答案 1 :(得分:1)

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

FirebaseFirestore.getInstance().disableNetwork()

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