Firebase 了解Firestore定价

Firebase 了解Firestore定价,firebase,google-cloud-firestore,Firebase,Google Cloud Firestore,在创建新应用程序之前,我要确保定价模型正确 例如,在一个电话簿应用程序中,我有一个名为userList的集合,其中有一个用户列表,这些用户是单独的文档 我的列表上有5万个用户,这意味着我的收藏中有5万个文档 如果我得到userList集合,它将读取所有50k文档 FireStore允许50k文档读取。这是指总共读取50k个文档还是每个文档读取50k个文档 在我的电话簿应用程序示例中,如果总共读取了50k个文档,我将在一次get呼叫中用完免费限制。免费配额用于您的整个项目。因此,在整个项目中,您可

在创建新应用程序之前,我要确保定价模型正确

例如,在一个电话簿应用程序中,我有一个名为userList的集合,其中有一个用户列表,这些用户是单独的文档

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

如果我得到userList集合,它将读取所有50k文档

FireStore允许50k文档读取。这是指总共读取50k个文档还是每个文档读取50k个文档


在我的电话簿应用程序示例中,如果总共读取了50k个文档,我将在一次get呼叫中用完免费限制。

免费配额用于您的整个项目。因此,在整个项目中,您可以读取50000个文档

阅读5万份用户档案文档确实可以一次性使用该免费配额

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

访问Firestore的客户端应用程序应该只读取它们将立即向用户显示的数据。你不可能在一个屏幕上容纳5万用户

因此,您更有可能在用户集合上进行聚合。例如:

  • 计算用户数
  • 计算名为Frank的用户数
  • 计算用户名的平均长度
与传统的关系数据库相比,NoSQL数据库的查询能力通常受到更大的限制,因为它们侧重于确保读取可伸缩性。如果在exchange中从数据库读取数据时可以获得更好的性能,那么在向数据库写入数据时,您经常会做额外的工作

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


有关如何运行此类聚合查询的示例,请参阅:。对于较低的写入卷,您也可以考虑使用云函数来更新计数器。

< P>如果您实际上需要拉取整个50K文档集合,那么您可能需要问的问题是如何正确地构造FixStury数据库。 您很可能需要使用查询WHERE子句根据文档中的某些条件筛选这些文档。让每个客户端设备在本地保存50k文档听起来像是糟糕的数据库规划,可能存在安全风险

查询返回的每个文档都计为1次读取
。如果查询没有匹配项,将收取1次读取费用。如果有50k个匹配项,则需要支付50k个读取

例如,您可以检索已登录用户的文档,并以如下方式收取
1 read


注意:从2018年10月起,Firestore在首个5万次/天之后,每10万次读取收费6美分(USD)。

不要一次性呼叫所有用户。您可以限制查询以获得有限数量的用户。当用户滚动时,您的查询将获得更多用户。而且,因为没有人会滚动浏览5万用户,所以您可以摆脱大量的成本。这类似于在循环视图中保存内存。

我同意你的看法。但这是一个极端的例子来澄清我的疑问。一个常见的场景是文档中有50个数据项的列表。假设你的应用每天有1000名用户,那么firestore也将超出免费限制。将使用实时数据库,因为我的数据不需要复杂的查询。@Frank Van Puffelen,我还有一个问题你可以回答。假设我有一个新闻网站,主页上有10篇文章。每次用户访问主页时,我的配额中会有10次读取吗?或者,它会将“标题”、“正文”、“作者”等每一项计算在内,并在用户每次访问我的网站时计算30次阅读次数?@gbland777这将取决于您的网站结构和firestore结构。对于我的应用程序,新闻提要的每个“项目”都将在每个文档中包含所有显示的数据。这实际上是10次读取以检索10条新闻提要。然后我缓存这些数据,每当用户单击返回主页时,它都会显示缓存的结果,并收取0次读取费用。此外,您还可以使用VuexFire之类的工具(取决于使用的tec)绑定到查询,该查询会在数据库更新时自动更新。阅读firestore docs的更多信息。或者,您可以创建一个派生文档,其中包含您在应用程序/网站的单个页面上显示的所有内容。我建议看一下托德的,特别是第三集和第五集。但这是一个极端的例子,让我清楚地认识到自己的疑惑。一个常见的场景是文档中有50个数据项的列表。假设你的应用每天有1000名用户,那么firestore也将超出免费限制。将使用实时数据库,因为我的数据不需要复杂的查询。请记住,文档中“数据项”的数量是无关的。当Firestore从查询返回文档时,它会自动返回其中的所有项目(绑定为对象),这正好是1次读取。对于每个检索整个用户文档的1000个用户,总共需要1000次读取。根据我对自己的应用程序的计算(类似于SO),我预计每个月20000名用户将支付200美元的账单,但我们将拭目以待我何时(而不是是否)到达那里!“即使查询没有返回任何结果,您执行的每个查询至少要读取一个文档。”@Hiwa感谢您的关注!我已经适当地更新了答案。
db.collection('userList').where('uid', '==', clientUID)