首页 > 解决方案 > Firebase / NoSQL - 如何聚合数据以进行统计

问题描述

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

我有的:

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

在此处输入图像描述

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

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

我在想什么:

一旦用户提出请求,让 firebase 遍历所有推荐可能不是最好的主意,因为它在 firebase 上可能会变得非常昂贵。我在想的是总是使用云函数来计算统计数据,例如,当有新申请人申请时,我会将计数器增加一个,对于特定部门的计数器,我会增加一个。但是,我觉得这对总数或预定义查询(例如“上个月”)起作用,但是一旦我不知道用户会选择什么日期,它就会开始变得棘手。

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

标签: firebasegoogle-cloud-firestorenosqlnosql-aggregation

解决方案


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

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

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

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


推荐阅读