我有一个简单的集合,为了测试,我在这个集合中创建了10k个文档。之后,当我使用limit(5)执行一个简单的查询时:
Firestore.instance.collection(myCollection).orderBy(myOrderBy).limit(5).getDocuments();我在控制台上看到了这一点:
W/CursorWindow(21291): Window is full: requested allocation 253420 bytes, free space 68329 bytes, window size 2097152 bytes
I/zygote64(21291): Background concurrent copying GC freed 535155(13MB) AllocSpace objects, 5(1240KB) LOS objects, 50% free, 17MB/35MB, paused 60us total 102.836ms当我访问我的Dashboard Firebase时,我发现我有10k的可读数。
所以我得出结论,我的查询返回了6个结果,但它读取了整个数据库。这会迅速降低性能并提高价格。
我寻找了一个解决方案,我找到了这个:
Firestore.instance.settings(persistenceEnabled: false;)它似乎起作用了,但我很难理解。默认情况下,Firestore加载整个集合,以便能够离线发出请求?在启动应用程序时更改firestore设置就足够了,我不太可能感到惊讶?如果我禁用持久化,我假设如果用户发出离线写请求,当他再次在线时,它将不再被持久化。有可能达成妥协吗?
谢谢,
发布于 2020-05-08 00:17:13
Firestore的离线存储就像一个缓存,保存它最近看到的任何文档。它不会预先加载您没有告诉它使用查询/读取操作加载的文档,因此在查询中,您每次执行查询时最多只能加载5个文档。
您是否碰巧从运行查询的同一客户端添加了10K文档?如果是这样,则该客户端的本地缓存可能/将包含所有这些文档,因为客户端添加了这些文档。在这种情况下,您需要卸载/重新安装客户端来擦除缓存,以获得更真实的用户体验。
您在usage选项卡中看到的10K读取量是一个单独的问题,您共享的代码不会对此进行解释。要记住的一件事是,加载到控制台中的文档也是收费读取的。
https://stackoverflow.com/questions/61655271
复制相似问题