我们的应用程序中的Firestore数据库脱机模式遇到严重问题,我希望我们只是在某个地方犯了一个愚蠢的错误。鉴于这绝对是我们的首选,任何输入将不胜感激!一些细节...
我们有几个查询,这些查询在使用WiFi时不到一秒钟,但在离线状态下可能需要花费分钟才能返回。
查询最终会返回正确的数据。
这些是非常简单的查询。只需返回其父ID字段与特定值匹配的集合中的所有文档即可。
结果集很小。有时只返回了很少的文档,而且返回的文档不超过25个。
它在多个查询中发生,因此它似乎并不特定于一种类型。
它同时在iOS和Android上发生。
我们正在使用Xamarin,并且正在使用Plugin.CloudFirestore库,该库运行良好。虽然肯定有可能与该库相关,但是鉴于该库只是包装本机API调用,这似乎令人怀疑。
有什么想法吗?预先感谢!
答案 0 :(得分:0)
当脱机缓存对于集合增大时,脱机查询可能会变慢。发生这种情况时,查询可能会变慢,因为本地设备几乎没有Firestore云服务能够大规模搜索许多文档的能力。脱机后,您将无法再保证根据结果集的大小扩展查询性能。
您可以选择的解决方法是:
答案 1 :(得分:0)
Firestore不是“离线优先”数据库,因此当前尚未针对本地处理大量数据进行优化,缓存上没有索引,速度取决于您使用的设备,文档的大小和您馆藏中文件的数量。
如果找到了这篇文章,可以帮助您离线优化查询:"Why is my cloud firestore query slow",尤其是第二个原因(“原因2:您的离线缓存太大” )。
首先,重要的是要了解离线模式的工作原理:
...当您查询离线缓存中的文档时,Cloud Firestore 需要解压缩本地存储的每个文档以进行收集 查询并将其与您的查询进行比较。或者换种说法, 在后端按规模查询结果集,但是 在本地,它们与集合中数据的大小成比例 您正在查询。
...如果单个集合中有大量数据要排序 通过,或者您只是在运行缓慢的设备上运行, 大型离线缓存可能会明显变慢。
这意味着在您的特定情况下,由于脱机查询返回多少文档无关紧要,而是您要查询的数据量特别大,特别是当您解释时在注释中您“在启动时执行多次读取”
然后,本文很好地解释了一些针对特定问题的解决方案,我将继续介绍一些要点,但我真的建议您查看全文:
我希望这些信息和建议可以帮助您了解和解决离线查询中的问题
答案 2 :(得分:0)
结果显示,当GetDocument()脱机时,将“源”强制为“缓存”可解决此问题。现在,我们的分钟查询时间已降至亚秒级。它们甚至比现在连接时还要快。