Firestore 定价模型案例

Posted

技术标签:

【中文标题】Firestore 定价模型案例【英文标题】:Firestore pricing model case 【发布时间】:2021-06-13 12:53:17 【问题描述】:

我试图了解 Firebase 定价模型,但我偶然发现了这一点。 https://firebase.google.com/docs/firestore/pricing

文档读取以外的查询

对于文档读取以外的查询,例如对集合 ID 列表的请求,您需要为一个文档读取付费。如果获取完整的结果集需要多个请求(例如,如果您使用分页),则您需要为每个请求支付一次费用。*

假设我从profiles 集合(10.000 个文档)中随机获取 10 个配置文件limit(10),这将花费我 10 次读取。

return FirebaseFirestore.instance
    .collection('profiles')
    .limit(10)
    .get()
    .then(...)

现在我想在 UI 中显示我的 10 个结果,并且我还想向客户显示一个心形图标,如果客户喜欢或不喜欢个人资料,该图标就会被填充。我会获取用户数据并检查用户是否喜欢 10 个配置文件之一。我已经学会了将用户特定数据存储在同一个集合profiles 中没有意义,假设我们将其保存在一个名为profilelikesusers 集合子集合中:

return FirebaseFirestore.instance
        .collection('users')
        .doc('userId')
        .collection('profilelikes')
        .get()
        .then((QuerySnapshot querySnapshot) => 
              querySnapshot.docs.forEach((doc) 
                if () 
                  // check if profiles from list matches userprofile document
                
              )
            );

这对这个案例究竟意味着什么?假设用户在profilelikes 中有 5000 个文档,如果其中 10 个匹配或不匹配,我将在 5000 个文档中搜索。假设其中 2 个匹配:

我们这里有多少成本?

First Query:10 次读取,因为我们这里有 10 个结果 第二次查询:???

【问题讨论】:

只是一个建议,如果您不想担心读/写计数,请坚持使用实时数据库,因为它具有更简单的计费结构。 感谢您的回答。我认为在我的情况下,实时数据库对我来说没有意义,因为它很深而不是平坦的,因为我有很多分层数据,并且实时数据会根据带宽量进行计费,即使我不需要它也会读取整个树。实时数据库适用于简单的数据结构。无论如何,如果有人能指出所提供的案例会发生什么,那将会很有趣:) 【参考方案1】:

您在问题中指出的章节实际上涵盖了“除了文档读取之外的查询”。例如,使用 Firestore REST API,您可以列出集合 ID,请参阅 API 文档中的 here。与 Admin SDK 相同,请参见 listCollections() 方法。

就您而言,您实际上是在阅读文档。

所以第一个查询将花费 10 次读取,“因为我们有 10 个结果”,如您所说。

第二个查询 (collection('users').doc('userId').collection('profilelikes').get()) 将花费 5000 次读取,因为您要查询包含 5000 个文档的整个(子)集合。

结论:您很可能应该调整您的数据模型(非规范化?)以避免获取整个子集合。


PS:值得注意的是minimum charge 用于文档读取的概念:“对于您执行的每个查询,即使查询没有返回任何结果,读取一个文档的最低费用也是如此。”

【讨论】:

感谢您清理问题。如果我对 10 个文档运行查询,从中获取 id 并添加一个 .where("id", "==", true);我的第二个查询包含我的 profilelikes 子集合中的信息? 然后你将读取的数量减少到与 where 过滤器对应的文档数量。如果没有与过滤器匹配的文档,它将计为一次阅读。 太好了,我想你让我终于明白什么时候阅读确实算作阅读。作为结论,这意味着如果我们在具有 5 或 500.000 个文档的任何集合或子集合中进行搜索,则没有区别,如果结果为 0,则只有查询的最终结果被计为一次读取或至少一次读取,对吗? 是的,就是这样。我建议您观看定价文档顶部的视频。此外,如果它解决了您的问题,请点赞我的回答,请参阅***.com/help/someone-answers。谢谢 我当然做到了! ***.com/questions/66456544/…也许你也有一个显示排行榜的智能解决方案?

以上是关于Firestore 定价模型案例的主要内容,如果未能解决你的问题,请参考以下文章

Firestore:加入与 Firestore 定价

Firebase Firestore 读取和定价

离线缓存数据的 Firestore 定价说明

Cloud Firestore 每次读取定价

Firestore 读/写定价; .limit(25) 算作 25 次读取还是 1 次?

Firestore 定价 - Firebase 控制台中的 CRUD 是不是重要?