Firestore实时侦听器和费用

时间:2020-08-12 15:34:10

标签: javascript firebase google-cloud-firestore

我试图了解使用Firestore实时侦听器的成本。在我的情况下,它是供编辑(实时协作)使用的。

编辑器中的单词可能对应于Firestore中的文档。编辑器中的文档可能是Firestore中的集合。

编辑器中的文档中可能有成千上万个单词。

每次用户在编辑器中打开文档时,都必须为相应的集合设置快照,如下所示(https://firebase.google.com/docs/firestore/query-data/listen#web_3):

db.collection("cities").where("state", "==", "CA")
    .onSnapshot(function(querySnapshot) {
        var cities = [];
        querySnapshot.forEach(function(doc) {
            cities.push(doc.data().name);
        });
        console.log("Current cities in CA: ", cities.join(", "));
    });

我有点担心这次通话的费用。而且我看不出有什么办法向用户收费。 (我想我几年前曾读过这个电话的费用很低,但是如果我现在没记错的话,它已经改变了。)

有人可以帮我澄清一下吗?


编辑:试图使我的问题更清楚。

  1. 我们说编辑器中的文档中有5000个单词。
  2. 这将是5000个Firestore文档。
  3. 在编辑器中打开文档将调用Firestore获取快照并设置侦听器(请参见上面的代码示例)。
  4. 据我了解,这将被视为阅读5000个Firestore文档。

我的问题是关于上面的第4点。我理解正确吗?

当用户重新打开此编辑器文档时会发生什么?每次会收取5000个Firestore文件费用吗?

(由于我正在编写的应用程序的性质,我希望用户多次打开每个文档。)


编辑2: 因为我相信现在很明显上面的代码实际上将收取5000次读取费用(请参阅上面的第4点),所以我认为我现在可以提出真正的问题而不会引起过多的困惑:

firebase.firestore().enablePersistence()完成后如何处理?

在某种程度上可以缓解这种情况吗?在我看来,Firestore collection可能就是这样。 (也许可以为集合存储最后的更改时间。我不确定。但是我认为这必须在Firestore端完成,而不是在我的代码中完成,或者?)在Firestore中实现了这样的事情吗?

2 个答案:

答案 0 :(得分:2)

我不清楚您的困惑是什么。但这件事的简单事实是:

如果您进行查询以从Firestore提取5000个文档,则会向您收取5000次文档读取费用。

您在这里没有显示任何可能发生的事情。每次您的代码执行该查询时,都会向您收费。

答案 1 :(得分:1)

根据Firestore docs

当您侦听查询结果时,每次在结果集中添加或更新文档时,您都要付费。当文档从结果集中删除时,由于文档已更改,也会向您收费。 (相反,删除文档后,您无需支付阅读费用。)

因此,这意味着,firestore的成本要比定期执行重复提取的成本低得多,并且最近一次都没有改变。

关于如何向用户收费,onSnapshot的处理程序是通过docSnapshot对象调用的,该对象包含添加,修改或删除文档的引用,因此应易于从中推断出费用