我有一些关于定价工作方式和firestore sdk内部结构的问题。
-
考虑一下这个场景,我正在使用flutter,如果我每次打开应用程序都运行这个方法
firestore.collection('collection_name').get().docs
。假设我在这个集合中有1000个文档。我每次打开应用程序时会被收取1000次阅读费吗?还是firestore只阅读更改后的文档?问题是";firestore是否足够聪明,只获取更改后的文档;还是每次我重新打开flutter应用程序时,它都会获取所有1000个文档。 -
在
firestore.collection('collection_name').get().docs
中实际上是get()
部分或文档部分通过网络从firestore获取文档。 -
我注意到一个
firestore.collection().docChanges
docChanges的作用是什么?我可以用它只从firestore获取更改后的文档吗?还是从firestore提取所有文档并只返回更改后的文件。
我观察到的情况(我没有认真做这个测试,也许我忽略了一些东西(:我正在使用flatterfire的flatter扩展来使用firestore。我进行了一些测试,尽管有可能有什么东西逃过了我的测试。我所做的是,我去了Gcp控制台firestore部分,比较了在不清除缓存和清除缓存的情况下打开应用程序后的总读取量。只有当我清除缓存时,才会显示新的读取。flatterfire插件足够聪明吗?还是我忽略了什么?
每次打开应用程序时,我会被收取1000次读取的费用吗?还是firestore只读取已更改的文档?
只要有网络连接来满足查询,每次执行查询代码时都会向您收费。不会有部分缓存的结果。如果要专门查询仅缓存,则必须在查询时指定out,并且它只返回缓存的结果。您应该向get((传递一个GetOptions参数,该参数指定查询应该使用缓存源。
什么是docChanges?我可以使用它只从firestore 中获取更改后的文档吗
docChanges是QuerySnapshot的一个属性。只有当您对实时接收文档更改的查询使用侦听器时,它才有用。它不适用于从调用到get()
的单个结果集,因此在这里的特定情况下没有帮助。
不幸的是,它从零开始提取所有文档,所以每次打开应用程序时,它都会提取所有文档。如果你使用了这么多recyclerView,这可能是个问题。因为每次用户打开你的应用程序时,都会提取一组文档。