【问题标题】:How to efficiently get 7 days, 30 days summary from Firebase realtime database?如何有效地从 Firebase 实时数据库中获取 7 天、30 天的摘要?
【发布时间】:2019-12-06 21:28:53
【问题描述】:

在 firebase 数据库中,我创建了一个名为“orders”的数据库。要存储的数据格式如下:

{
    cost: orderCost,
    createdAt: createdAt,
}

在firebase中,树如下:

我想要实现的是根据createAt时间戳快速获取最近7天或30天的费用总和。

我想到的是为createdAt创建索引,并基于它运行查询。

但是如果数据集很大,比如几百万个条目,运行上述查询是否仍然有效?

请多多指教。谢谢!

【问题讨论】:

    标签: firebase-realtime-database


    【解决方案1】:

    基本上你想要的是一个计数器/聚合。根据您需要的摘要的粒度以及数据摄取/文档写入的速率,您将:

    1. 使用Cloud Function triggers 对成本总和进行每日聚合
    2. 如果数据量很大,请使用distributed counter 更新总和。

    有了可用的每日汇总统计信息,您可以通过仅查询 N 个文档来进行任何临时 N 天的汇总。

    如果您热衷于探索其他选项,还可以将 Firebase 中的数据推送到 BigQuery 等分析工具。

    【讨论】:

      【解决方案2】:

      Firebase 实时数据库没有内置聚合函数。

      你有几个选择:

      • 加载所有数据,并按需计算聚合。
      • 继续在数据库中运行聚合,并在每次写入操作时更新。
      • 将数据从 Firebase 导出到具有更好查询功能的系统(如 BigQuery 或 Data Flow),然后将结果写回 Firebase。

      这个话题之前已经介绍过,所以我建议你去看看:

      【讨论】:

      • 谢谢弗兰克。我也想到了第二种方法。假设对于 7 天聚合,我想我可以创建一个单独的 ref("7days") 来存储最近的 7 天数据。如果我想要 7 天的总和,我只需要去 ref("7days") 来总结它们。我听说我们可以在云功能中做日程安排功能。通过这种方式,云功能可以表现得像一个 cron 作业,它可以推送新数据并弹出超过 7 天的数据。这听起来对你可行吗?谢谢!
      • 1) 我更可能按天和周汇总,然后读取您需要报告的天数/周数。这需要固定数量的读取,同时允许更灵活的报告模型。 2) 调度云函数,见firebase.google.com/docs/functions/schedule-functions
      • 我完全同意。感谢您的建议!
      猜你喜欢
      • 1970-01-01
      • 2022-01-09
      • 2012-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-03
      相关资源
      最近更新 更多