我试图了解使用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(", "));
});
我有点担心这次通话的费用。而且我看不出有什么办法向用户收费。 (我想我几年前曾读过这个电话的费用很低,但是如果我现在没记错的话,它已经改变了。)
有人可以帮我澄清一下吗?
编辑:试图使我的问题更清楚。
我的问题是关于上面的第4点。我理解正确吗?
当用户重新打开此编辑器文档时会发生什么?每次会收取5000个Firestore文件费用吗?
(由于我正在编写的应用程序的性质,我希望用户多次打开每个文档。)
编辑2: 因为我相信现在很明显上面的代码实际上将收取5000次读取费用(请参阅上面的第4点),所以我认为我现在可以提出真正的问题而不会引起过多的困惑:
firebase.firestore().enablePersistence()
完成后如何处理?
在某种程度上可以缓解这种情况吗?在我看来,Firestore collection
可能就是这样。 (也许可以为集合存储最后的更改时间。我不确定。但是我认为这必须在Firestore端完成,而不是在我的代码中完成,或者?)在Firestore中实现了这样的事情吗?
答案 0 :(得分:2)
我不清楚您的困惑是什么。但这件事的简单事实是:
如果您进行查询以从Firestore提取5000个文档,则会向您收取5000次文档读取费用。
您在这里没有显示任何可能发生的事情。每次您的代码执行该查询时,都会向您收费。
答案 1 :(得分:1)
根据Firestore docs,
当您侦听查询结果时,每次在结果集中添加或更新文档时,您都要付费。当文档从结果集中删除时,由于文档已更改,也会向您收费。 (相反,删除文档后,您无需支付阅读费用。)
因此,这意味着,firestore的成本要比定期执行重复提取的成本低得多,并且最近一次都没有改变。
关于如何向用户收费,onSnapshot
的处理程序是通过docSnapshot对象调用的,该对象包含添加,修改或删除文档的引用,因此应易于从中推断出费用