用于读取带有子集合的文档的Firestore计费

hih*_*828 6 ios firebase swift google-cloud-firestore

我正在制作一个应用程序,其中存储了用户使用我的应用程序学习了多少分钟。我的Firestore数据库以“用户”集合开头,每个用户都有自己的文档,该文档由Auth中生成的userID命名。

我的问题是,如果我阅读了他们的userID文档,该文档的子集合中包含许多文档,那是否算作一次读取,还是也算出了子集合中的文档数量?

先感谢您。

Tor*_*win 5

如果您指的是Document从 FireStore 访问 a(在本例中为您生成的用户 ID)是否需要 1 次读取?

我想答案是肯定的。

从 Firestore 进行的任何查询或读取都只会提取您要映射到的引用。例如,如果您抓取 User -> userID -> 第三个文档中的第三个文档,则仅返回第三个文档。除了 userID 之外,该集合或任何集合中都没有其他文档。

这能回答您的问题还是您在问完全不同的问题?

供参考: https: //firebase.google.com/docs/firestore/pricing#operations

编辑:从查询中提取的每个单独文档都将被收费。例如,如果您提取父集合(其中包含 6 个文档),则您将需要为所有 6 个文档付费。这个想法是只获取您需要的文档或使用游标来恢复长时间运行的查询。例如,如果您只希望与使用特定日期的数据有关的文档(如果您的数据是这样设置的),则您只需检索该特定文档,而不会检索集合中其他日期的所有文档。

一个简单的思考方式是:如果您检索文档;无论在哪里,它都算作一次阅读。

  • 啊,这很遗憾,但有道理。非常感谢。 (2认同)

Dou*_*son 5

托雷温(Torewin)的答案在大多数情况下是正确的,但它缺少一个重要的细节。它说:

如果您检索文件;随处可见

这并非完全正确。缓存的文档读取不作为读取计费。这是Firestore客户端SDK的一项重要功能,可帮助降低结算费用。如果使用默认的“源”获取单个文档(源选项为“缓存”或“服务器”或“默认”),则将首先查询缓存,如果缓存是新鲜的,则无需计费即可获取该文档。

查询结果也是如此。如果文档来自缓存,则该读取没有计费。但是,每个查询至少要读取1个文档。

我不确定托雷温在评论中的意思是:“他们建议您进行多次读取而不是一次大读取,因为这样可以省钱。” 就计费而言,所有读取均具有相同的“大小”,仅考虑读取本身的成本。该文档的大小仅与互联网出口使用成本有关,该文档中有关于定价的文档

值得注意的是文档不能“包含”其他文档。文档包含在集合或子集合中。这些收藏只有一条描述他们居住地的“路径”。没有“父”文档就可以存在子集合。如果文档不存在,但是在其下组织了一个集合,则文档ID在控制台中以斜体显示。使用客户端API删除文档时,不会删除其子集合。在这方面,删除被称为“浅”。