我们正在用dart开发一个应用程序,其中我们需要一次获取大约5万行左右(在应用程序加载时执行),然后数据将在应用程序的其他部分中用于进一步的计算。我们正在使用Firebase Realtime数据库,并且面临一些严重的性能问题。
当前加载50K行大约需要40秒(当前使用的是免费数据库版本,不确定是否会这样做),但是我们还观察到,当多个用户使用该应用程序时,大约需要1分钟20秒加载5万行,Peak达到100%。
您能否建议我们如何提高Firebase实时数据库的性能?
如果我将数据分为两个集合,但将其保存在同一JSON文件中,那会有所帮助吗?
是因为我们正在使用当前免费的数据库版本进行测试吗?
我们尝试在1个关键字段的“规则”部分中创建索引,但这并没有太大帮助。有什么办法可以改善这一点?
答案 0 :(得分:0)
是因为我们正在使用当前免费的数据库版本进行测试吗?
所有Firebase实时数据库实例在同一基础结构上运行。根据您的项目所依据的计划没有任何区别。
您能否建议我们如何提高Firebase实时数据库的性能?
提高性能的最好方法是仅加载要立即显示给用户的数据。在任何客户端应用程序中,用户不太可能查看5万个项目,更不用说在应用程序启动时直接看它们了。
如果您需要5万个项目来向用户显示初始数据,则通常意味着您正在以某种方式聚合该数据,并向用户显示该聚合。将数据写入到数据库中时,请考虑进行聚合,并将聚合结果存储在数据库中。然后,您可以只在每个客户端中加载该结果,而不是让每个客户端自己进行聚合。
有关更多数据建模技巧,请阅读NoSQL data modeling并观看Firebase for SQL developers。我还建议您观看Getting to know Cloud Firestore,该书适用于Cloud Firestore,但其中包含许多适用于所有NoSQL数据库的出色技巧。