Javascript Firestore实时侦听器和成本

Javascript Firestore实时侦听器和成本,javascript,firebase,google-cloud-firestore,Javascript,Firebase,Google Cloud Firestore,我试图了解使用Firestore实时侦听器的成本。在我的例子中,这是一个编辑器(实时协作) 编辑器中的单词可能对应Firestore中的文档。编辑器中的文档可能是Firestore中的集合 在编辑器中,文档中可能有数千个单词 每次用户在EDT中打开文档时,都必须为相应的集合设置快照,如下所示(): 数据库集合(“城市”)。其中(“州”、“州”、“CA”) .onSnapshot(函数(querySnapshot){ var cities=[]; querySnapshot.forEach(函数(

我试图了解使用Firestore实时侦听器的成本。在我的例子中,这是一个编辑器(实时协作)

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

在编辑器中,文档中可能有数千个单词

每次用户在EDT中打开文档时,都必须为相应的集合设置快照,如下所示():

数据库集合(“城市”)。其中(“州”、“州”、“CA”) .onSnapshot(函数(querySnapshot){ var cities=[]; querySnapshot.forEach(函数(doc){ cities.push(doc.data().name); }); log(“CA中的当前城市:”,cities.join(“,”); }); 我有点担心这个电话的费用。我看不出有办法向用户收费。(我想我几年前读到过,这个电话的费用很低,但如果我没记错的话,现在它已经改变了。)

有人能帮我澄清一下吗


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

  • 假设编辑器中的文档中有5000个单词
  • 这将是5000份Firestore文档
  • 在编辑器中打开文档将调用Firestore以获取快照并设置侦听器(请参见上面的代码示例)
  • 据我所知,这将作为阅读5000份Firestore文件而收费
  • 我的问题是关于上述第4点。我理解正确吗

    当用户重新打开这个编辑器文档时会发生什么?每次5000份Firestore文档是否要收费

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


    编辑2: 因为我相信现在很清楚,上面的代码实际上将收取5000次读取的费用(见上文第4点),我想我现在可以提出真正的问题,而不会引起太多的混淆:

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

    有什么地方可以减轻这种情况吗?在我看来,Firestore
    collection
    可能就是这样一个问题。(上次更改时间可能会存储在一个集合中。我不确定。但我认为这必须在Firestore端完成,而不是在我的代码中,或者?)Firestore中是否实现了类似的功能?

    根据Firestore

    当您侦听查询结果时,每次添加或更新结果集中的文档时,您都要支付读取费用。由于文档已更改而从结果集中删除文档时,还将收取读取费用。(相反,当删除文档时,您不需要支付读取费用。)

    因此,这意味着firestore的成本比在间隔上执行重复抓取要低得多,而且最近任何时候都没有改变


    关于如何为此向用户收费,使用docSnapshot对象调用
    onSnapshot
    的处理程序,该对象包含添加、修改或删除文档的引用,因此应该可以很容易地从中推断账单。我不太清楚您的困惑是什么。但简单的事实是:

    如果您进行的查询从Firestore获取5000份文档,您将被收取5000份文档读取费


    你在这里展示的没有任何东西表明还会发生其他事情。每次您的代码执行该查询时,都会向您收取费用。

    现在还不完全清楚您希望得到什么样的答案,或者您在计算查询成本时遇到了什么困难。您似乎还有第二个问题,与会计和用户账单有关。我建议将这个问题缩小到一个单独的、离散的问题,并提供清晰的数据。文档非常清楚,请参阅哪个州的文档:每100000个文档0.06美元。因此,阅读100000份文件的费用是0.06美元。然后添加在同一链接上显示的存储数据定价。还有别的吗?我还是很困惑。我不知道你说的“firestore编辑器”是什么意思。您的问题是当您使用Firestore web控制台时它是如何工作的,还是您提供的代码是如何工作的?它应该只是一个或另一个。它们不一样。你指的“编辑”是什么?我完全不清楚。我不明白每一步都涉及到什么。持久性的要点是允许用户在互联网连接中断的情况下继续与你的应用程序交互,比如当用户通过隧道时。如果他们在这段时间内写入了大量数据,当连接重新建立时,它会将这些数据写入firebase,并向您收取费用。雷德也有同样的表现。你不应该依赖持久性来减轻任何账单负担,而应该完全依靠每100000次读取来降低成本。06.第一次查询匹配的每个文档都会为你计费。然后,在对这些文档中的任何一个进行后续更改时,您会收到额外读取的账单Firestore web控制台会向您收取文档读取的账单,如果您是这样要求的话。据我所知,脱机持久化很可能不会显著降低成本。而且可能会破坏你应用程序的用户体验,因为我知道它是某种多用户实时编辑器。我可以建议你重新考虑一下你的结构吗?您仍然可以实现实时功能,而无需将每个单词都制作成文档。您可以将编辑器的整个内容制作成包含单词数组的文档。这样做并不会让你损失太多,也会让你省下一个tonI understand@Leo。我仍然认为最好的选择是改变结构谢谢,但是持久性存储呢?我认为可以通过稍微不同的方式来缓解这种情况。我不知道在这种情况下这是怎么回事。(Firestore collections是一个可能的技术点