Firestore数据库脱机模式已损坏

时间:2020-06-25 18:09:45

标签: xamarin google-cloud-firestore offline

我们的应用程序中的Firestore数据库脱机模式遇到严重问题,我希望我们只是在某个地方犯了一个愚蠢的错误。鉴于这绝对是我们的首选,任何输入将不胜感激!一些细节...

  • 我们有几个查询,这些查询在使用WiFi时不到一秒钟,但在离线状态下可能需要花费分钟才能返回。

  • 查询最终会返回正确的数据。

  • 这些是非常简单的查询。只需返回其父ID字段与特定值匹配的集合中的所有文档即可。

  • 结果集很小。有时只返回了很少的文档,而且返回的文档不超过25个。

  • 它在多个查询中发生,因此它似乎并不特定于一种类型。

  • 它同时在iOS和Android上发生。

  • 我们正在使用Xamarin,并且正在使用Plugin.CloudFirestore库,该库运行良好。虽然肯定有可能与该库相关,但是鉴于该库只是包装本机API调用,这似乎令人怀疑。

有什么想法吗?预先感谢!

3 个答案:

答案 0 :(得分:0)

当脱机缓存对于集合增大时,脱机查询可能会变慢。发生这种情况时,查询可能会变慢,因为本地设备几乎没有Firestore云服务能够大规模搜索许多文档的能力。脱机后,您将无法再保证根据结果集的大小扩展查询性能。

您可以选择的解决方法是:

  • 完全禁用持久性
  • 手动初始化新的Firebase应用程序实例,将其持久性缓存的大小设置为某种管理,并且仅将此应用程序实例用于速度较慢的查询
  • 仅在联机时执行此查询,并指定服务器源

答案 1 :(得分:0)

Firestore不是“离线优先”数据库,因此当前尚未针对本地处理大量数据进行优化,缓存上没有索引,速度取决于您使用的设备,文档的大小和您馆藏中文件的数量。

如果找到了这篇文章,可以帮助您离线优化查询:"Why is my cloud firestore query slow",尤其是第二个原因(“原因2:您的离线缓存太大” )。

首先,重要的是要了解离线模式的工作原理:

...当您查询离线缓存中的文档时,Cloud Firestore 需要解压缩本地存储的每个文档以进行收集 查询并将其与您的查询进行比较。或者换种说法, 在后端按规模查询结果集,但是 在本地,它们与集合中数据的大小成比例 您正在查询。

...如果单个集合中有大量数据要排序 通过,或者您只是在运行缓慢的设备上运行, 大型离线缓存可能会明显变慢。

这意味着在您的特定情况下,由于脱机查询返回多少文档无关紧要,而是您要查询的数据量特别大,特别是当您解释时在注释中您“在启动时执行多次读取”

然后,本文很好地解释了一些针对特定问题的解决方案,我将继续介绍一些要点,但我真的建议您查看全文:

  1. 为查询添加限制,以便仅检索您认为用户需要的数据,并考虑将不需要的详细信息移入子集合
  2. 不要在缓存中填充过多的数据。
  3. 请考虑减少离线缓存的大小。在这一点上,我想指出,根据documentation ,默认缓存大小阈值为40 MB,最小为1 MB ,可以通过修改{{1} }

我希望这些信息和建议可以帮助您了解和解决离线查询中的问题

答案 2 :(得分:0)

结果显示,当GetDocument()脱机时,将“源”强制为“缓存”可解决此问题。现在,我们的分钟查询时间已降至亚秒级。它们甚至比现在连接时还要快。