在创建一个新的应用程序之前,我想确保我的定价模型是正确的。
例如,在一个电话簿应用程序中,我有一个名为userList的集合,它有一个用户列表,这些用户是单独的文档。
我的列表中有50k个用户,这意味着我的收藏中有50k个文档。
如果我要获得userList集合,它将读取所有50k文档。
FireStore允许50k文档读取。这意味着总共读取50k个文档还是每个文档读取50k个文档?
就像在我的电话簿应用程序的例子中,如果它是50k文档,总共读取,我将超过免费的限制,只要一次得到调用。
发布于 2018-10-06 23:50:02
如果您实际上需要提取整个50k文档的集合,那么您可能会问的问题是如何正确地构造一个Firestore数据库。
您很可能需要使用查询WHERE子句,根据其中的一些条件过滤这些文档。让每个客户端设备在本地保存50k个文档,听起来像是数据库规划不善,而且可能存在安全风险。
Each returned document from your query counts as 1 read。如果您的查询没有匹配项,则将收取1读。如果有50k的火柴,就会有50k的读数充电。
例如,您可以检索登录用户的文档,并向1 read收取以下内容:
db.collection('userList').where('uid',‘=’=‘,clientUID)
注:自2018年10月起,每100 K阅读6美分(美元)后的第一个50k/天。
发布于 2018-02-17 04:57:32
免费配额是为您的整个项目。因此,您可以在整个项目下读取50.000个文档。
阅读50K用户配置文件确实可以一次性使用免费配额。
通常情况下,在使用NoSQL数据库时,应该尽量防止读取大量文档。
访问Firestore的客户端应用程序只应该读取它们将立即显示给用户的数据。你不可能在屏幕上安装50K的用户。
因此,更有可能的情况是,您正在对用户集合进行聚合。例如:
与传统的关系数据库相比,NoSQL数据库的查询能力通常受到更大的限制,因为它们侧重于确保读取可伸缩性。当一些东西被写入数据库时,您经常会做额外的工作,如果作为交换条件,您可以在从数据库读取时获得更好的性能。
为了获得更好的性能,您需要将这些聚合值存储在数据库中,然后在编写用户配置文件时更新它们。因此,您将有一个"userCount",一个带有“每个惟一用户名的userCount”的文档,以及一个"averageUsernameLength“。
有关如何运行此类聚合查询的示例,请参阅:https://firebase.google.com/docs/firestore/solutions/aggregation。对于较低的写入卷,还可以考虑使用云函数更新计数器。
发布于 2019-10-21 06:41:42
不要一次打电话给所有的用户。您可以将查询限制为获得有限数量的用户。当用户滚动时,查询将获得更多的用户。而且,由于没有人会滚动到50,000用户,所以你可以摆脱一捆成本。这类似于在循环视图的情况下节省内存。
https://stackoverflow.com/questions/48837464
复制相似问题