了解Firestore定价

krv*_*krv 4 firebase google-cloud-firestore

在创建新应用之前,我想确保我获得正确的定价模型。

例如,在电话簿应用程序中,我有一个名为userList的集合,该集合具有作为单个文档的用户列表。

我的列表中有5万个用户,这意味着我的收藏集中有5万个文档。

如果要获取userList集合,它将读取所有50k文档。

FireStore允许读取50k文档。这是否意味着总共读取50k文档或每个文档读取50k文档?

就像我的电话簿应用程序示例中一样,如果文档总数为50k,那么我只会在一次get呼叫中耗尽免费限制。

Fra*_*len 5

免费配额适用于您的整个项目。因此,您可以在整个项目下进行50.000个文档读取。

实际上,一次读取5万个用户个人资料文档将使用该免费配额。

通常,在使用NoSQL数据库时,应尝试防止读取大量文档。

访问Firestore的客户端应用程序应只读取它们将立即显示给用户的数据。而且,您不可能在屏幕上容纳5万名用户。

因此,您更有可能汇总用户集合。例如:

  • 计算用户数
  • 计算名为Frank的用户数
  • 计算用户名的平均长度

与传统的关系数据库相比,NoSQL数据库通常在查询功能上受到更多限制,因为它们专注于确保读取可扩展性。将某些内容写入数据库时​​,您经常会做一些额外的工作,如果作为交换,从数据库中读取时可以获得更好的性能。

为了获得更好的性能,您需要将这些聚合值存储在数据库中,然后在编写用户配置文件时对其进行更新。因此,您将拥有一个“ userCount”,一个带有“每个唯一用户名的userCount”的文档以及一个“ averageUsernameLength”。

有关如何运行此类聚合查询的示例,请参见:https : //firebase.google.com/docs/firestore/solutions/aggregation。对于较低的写入量,您还可以考虑使用Cloud Functions更新计数器。


Jav*_*ast 5

如果您实际上必须提取整个5万个文档集合,那么您可能应该问的问题是如何正确构建Firestore数据库

您很有可能需要使用查询WHERE子句根据文档中的某些条件来过滤这些文档。让每个客户端设备本地保存50k个文档听起来像数据库计划不佳,并且可能会带来安全风险。

Each returned document from your query counts as 1 read。如果没有与您的查询匹配的内容,则会收取1读。如果有5万个匹配项,则将收取5万次读取。

例如,您可以检索登录的用户文档,并承担以下费用1 read

db.collection('userList').where('uid', '==', clientUID)
Run Code Online (Sandbox Code Playgroud)

注意:从2018年10月10日起,Firestore每天首50k的费用为每10万次读取收取6美分(USD)。

  • “即使查询未返回任何结果,您执行的每个查询也至少需要读取一份文档。” https://firebase.google.com/docs/firestore/pricing (2认同)