【问题标题】:Firebase / NoSQL - How to aggregate data for statisticsFirebase / NoSQL - 如何聚合数据以进行统计
【发布时间】:2021-08-18 19:31:48
【问题描述】:

我正在使用 Firebase 创建我的第一个项目,并且我需要一些基于用户输入的统计数据。我知道 Firebase(或一般的 NoSQL 数据库)对于统计数据并不理想,但它们在任何其他情况下都适用于我,所以我想试一试。

我有什么:

我正在开发人们可以邀请朋友为他们的公司工作的应用程序,所以我有一个“推荐人”的集合,其中每个推荐人的 ID 基本上是推荐人所属用户的用户 ID,然后有存储数据的名称为“items”的子集合。

我的数据是什么样的: 每个项目都有这些数据:

  • 申请人
  • 申请日期
  • 职位(职位的一部分是 positionId 和该职位来自的部门)
  • 状态

我想要的是让用户根据以下内容进行统计:

  • 日期范围
  • 状态
  • 部门

我在想什么:

一旦用户提出请求,让 firebase 遍历所有推荐可能不是最好的主意,因为它在 firebase 上可能会变得非常昂贵。我在想的是using cloudfunctions 总是在发生变化时计算统计数据,例如当一个新的申请人申请时,我会增加一个柜台,与特定部门的柜台相同。但是我觉得这适用于总数或预定义查询,例如“上个月”,但一旦我不知道用户会选择什么日期,它就会开始变得棘手。

知道如何设计这样的东西吗? 非常感谢!

【问题讨论】:

    标签: firebase google-cloud-firestore nosql nosql-aggregation


    【解决方案1】:

    您正在考虑的是在 Firestore 和大多数 NoSQL 数据库中计算聚合的惯用方法。如果您遵循这种模式,Firestore 非常适合存储统计信息。

    像未知数据范围这样的临时统计数据更棘手。通常这归结为存储正确的值,让您无需读取未知数量的文档来计算值。

    例如,如果您存储每个月、周、日和小时的统计计数器,则可以通过有限数量的读取操作来满足广泛的日期范围。您可能需要读取多个文档,但要读取的文档数量取决于范围,而不是数据库中的文档总数。

    当然,对于最灵活的即席查询,您可能仍需要考虑另一种解决方案,例如 BigQuery,该解决方案正是为此用例而设计的。

    【讨论】:

    • 您好,谢谢您的回答。存储在 Firestore 中的外观如何?我会有 3 个子集合,其中一个是当天的子集合,一个是月的子集合,一个是年的子集合?子集合中的每个项目都将具有特定于 ID 的 ID,例如 DATE 或 TIMESTAMP 每个子集合将只有一个带有计数器值的字段?我会根据用户输入来决定我需要来自哪个集合的数据?
    • 这确实是存储此类数据的有效选择。这意味着,根据您要加载的数据范围,您可以知道要加载的文档的 ID,因此您无需运行一组查询。
    猜你喜欢
    • 2013-11-29
    • 2017-03-14
    • 2016-03-17
    • 2016-12-11
    • 2018-01-18
    • 1970-01-01
    • 2012-02-04
    • 2017-08-06
    • 2013-08-14
    相关资源
    最近更新 更多