堆栈:
Ionic
Nodejs/Express
Cloud Firestore
我的任务是编写一个应用程序,该应用程序以“天”格式记录日期,并带有该天的余额,并使用Chart.js在图表中显示该数据。有间隔按钮,使您可以在“天”,“周”和“月”之间进行切换,以将日期分组为相应的间隔。
目前使用1个集合可以正常工作。“几天”和“几周”都可以工作,但是一旦我们进入拥有大量数据的“月”,Firestore就会在我的后端中自杀。它尝试轮询的数据量太大。我目前在后端使用“天”对“周”和“月”运行聚合。
我在文档中只能找到的汇总文档是:https : //firebase.google.com/docs/firestore/solutions/aggregation,它不会给我结果,而是将其存储在对我没有帮助的集合中。该应用程序可以在单个日期更改余额,这会在事实发生后在余额中产生连锁反应-因此我必须在间隔更改时生成值。
是否存在类似的内容,还是我坚持创建3个独立的集合(天/周/月)并轮询所需的集合?
从您链接的文档中:
Cloud Firestore不支持本机聚合查询。
这样就可以很好地回答标题中的问题:Firestore没有内置功能可在数据库服务器上运行聚合。
常见的解决方案是:
在客户端上运行聚合
听起来这就是您现在正在做的事情:您正在下载内部的所有数据,然后将其聚合到客户端上。这种方法适用于小型数据集,但如果仅在客户端中显示聚合,则可能会下载比所需更多的数据。这就是为什么如果您的数据集可能很大(在使用Firestore时通常会出现)的情况下,您应该考虑其他选择。
每次数据更改时更新汇总
在这种情况下,您将汇总值存储在数据库中,并在每次写入汇总值时对其进行更新。该文档显示了以这种方式计算移动平均值的示例,该示例根本不需要查询,因此可以缩放到任何大小的数据集。
在这种情况下,您必须记住,Firestore仅限于每秒对每个文档执行一次写入操作。因此,如果您接收到的数据更多,则可能需要分发聚合查询,如分布式计数器文档中所示。
使用另一个数据库进行聚合查询
另一种选择是使用Firestore存储客户端读取的数据,但使用另一个数据库进行复杂的动态查询。
一个典型的示例是将数据从Firestore导出到BigQuery,然后在BigQuery中执行计算,然后将结果写回到Firestore,以便客户端可以读取它们。在这里,您将两种产品都发挥出最佳性能:Firestore用于大规模提供数据,BigQuery用于大规模处理数据。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句