【问题标题】:How to improve performance in Firebase real time database如何提高 Firebase 实时数据库的性能
【发布时间】:2019-07-15 09:51:42
【问题描述】:

我们正在 dart 中开发一个应用程序,其中我们需要一次获取超过 50K 行(在应用程序加载时执行),然后数据将用于应用程序的其他部分以进行进一步计算。我们正在使用 Firebase 实时数据库,并且面临一些严重的性能问题。

目前加载 50K 行大约需要 40 秒(当前使用免费数据库版本,不确定是否是这个原因),但我们也观察到,当多个用户使用该应用程序时,开始需要大约 1 分钟20 秒加载 50K 行,峰值达到 100%。

您能否建议我们如何提高 Firebase 实时数据库的性能?

如果我将数据分成两个集合但将其保存在同一个 JSON 文件中,会有帮助吗?

可能是因为我们正在使用当前免费的数据库版本进行测试?

我们已尝试在 1 个关键字段的“规则”部分创建索引,但这并没有太大帮助。有什么办法可以改进吗?

【问题讨论】:

  • 你检查了这个链接吗? firebase.google.com/docs/database/usage/optimize
  • 嗨,Ammar - 我查看了那篇文章,但索引并没有太大帮助,我们还将使用性能监控来监控性能。
  • 应用来自少数用户的负载应该不会对查询的性能产生太大影响。如果没有具体的基准,也没有了解用户和数据库之间的网络连接质量,就真的无法说出速度变慢的原因。如果查询中的数据量增加,您可以预期查询时间会增加,因为它只需要通过网络移动更多数据。
  • 感谢道格的评论!我不希望很多用户一次访问数据库,大约有 15 个用户,每个用户将查询一次以在应用程序中进行 40K 到 50K 行的初始加载。所有 15 个用户将点击 JSON 树中的不同节点,如果我将每个集合(50K 行)拆分到单个项目中的单独数据库中,这可能有效但不想这样做。
  • 我认为这篇文章,How to optimize Firebase Realtime Database calls to improve performance? 可能会有所帮助。

标签: performance firebase-realtime-database flutter dart


【解决方案1】:

可能是因为我们正在使用当前免费的数据库版本进行测试?

所有 Firebase 实时数据库实例都在同一个基础架构上运行。根据您的项目所采用的计划,没有区别。

您能否建议我们如何提高 Firebase 实时数据库的性能?

提高性能的最佳方法是仅加载您将立即向用户显示的数据。在任何客户端应用程序中,用户都不太可能查看 50K 项,更不用说在应用程序启动时直接查看它们了。

如果您需要 50,000 个项目来向用户显示初始数据,这通常意味着您正在以某种方式聚合这些数据,并向用户显示该聚合。考虑在将数据写入到数据库时进行聚合,并将聚合结果存储在数据库中。然后,您可以在每个客户端中仅加载该结果,而不是让每个客户端进行自己的聚合。

如需更多数据建模技巧,请阅读NoSQL data modeling 和观看Firebase for SQL developers。我还建议观看 Getting to know Cloud Firestore,它适用于 Cloud Firestore,但包含许多适用于所有 NoSQL 数据库的重要提示。

【讨论】:

  • 谢谢弗兰克!但我想在初始加载时完整数据的原因是为了提高搜索性能。我正在本地列表中加载 50K 行,一旦初始加载完成,我就不会执行任何数据库调用以进行读取。这样,当用户在应用程序中搜索任何用户时,它会很快。第二个原因是满负荷,因为我生成的报告很少,应该使用 group by 在所有 50K 文档上完成。我会检查您提供的资源,如果您有改进此方案的建议,请告诉我
  • 如果用户搜索,则表示他们对搜索的数据感兴趣。通过下载 50K 节点,您:1) 延迟它们的初始启动时间,2) 下载比他们明显感兴趣的更多的数据。虽然您当然可能有一些独特的要求,但这对我来说听起来像是错误的权衡。相反,我建议查看 Firebase 数据库查询以仅加载符合他们兴趣的数据。如果您确实希望始终下载所有数据,请考虑将整个 Blob 存储在更简单的介质上,例如 Cloud Storage for Firebase。
  • 感谢弗兰克的建议!让我检查一下并回复你。
猜你喜欢
  • 2011-01-01
  • 1970-01-01
  • 2010-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
  • 2016-12-25
相关资源
最近更新 更多