firebase - Firebase / NoSQL - 如何聚合数据以进行统计
问题描述
我正在使用 Firebase 创建我的第一个项目,当我需要一些基于用户输入的统计数据时,我就到了这一点。我知道 Firebase(或一般的 NoSQL 数据库)对于统计数据并不理想,但它们在任何其他情况下都适用于我,所以我想试一试。
我有的:
我在人们可以邀请朋友为他们的公司工作的应用程序上工作,所以我有一个“推荐人”的集合,其中每个推荐人的 ID 基本上是推荐人所属的用户的用户 ID,然后有一个子集合将存储数据的名称命名为“项目”。
我的数据是什么样子的: 每个项目都有这些数据:
- 申请人
- 申请日期
- 职位(职位的一部分是 positionId 和该职位来自的部门)
- 地位
我想要的是让用户根据以下内容进行统计:
- 日期范围
- 地位
- 部
我在想什么:
一旦用户提出请求,让 firebase 遍历所有推荐可能不是最好的主意,因为它在 firebase 上可能会变得非常昂贵。我在想的是总是使用云函数来计算统计数据,例如,当有新申请人申请时,我会将计数器增加一个,对于特定部门的计数器,我会增加一个。但是,我觉得这对总数或预定义查询(例如“上个月”)起作用,但是一旦我不知道用户会选择什么日期,它就会开始变得棘手。
知道如何设计这样的东西吗?非常感谢!
解决方案
您正在考虑的是在 Firestore 和大多数 NoSQL 数据库中计算聚合的惯用方法。如果您遵循这种模式,Firestore 非常适合存储统计信息。
像未知数据范围这样的临时统计数据更棘手。通常这归结为存储正确的值,以使您无需读取未知数量的文档来计算值。
例如,如果您存储每个月、周、日和小时的统计计数器,则可以通过有限数量的读取操作满足广泛的日期范围。您可能需要阅读多个文档,但要阅读的文档数量取决于范围,而不是数据库中的文档总数。
当然,对于最灵活的即席查询,您可能仍需要考虑另一种解决方案,例如 BigQuery,它正是为此用例而设计的。
推荐阅读
- .net - 显示 TabPage 时会触发什么事件?
- android - 为什么我在 Google Play 应用程序(仅限应用程序)中的所有屏幕截图都是像素化的
- c++ - 确保用户只提供 Y 或 N
- php - 我想隐藏没有子类别的父名称 - wordpress
- c# - 为什么我会收到编译器错误 CS0120:非静态字段、方法或属性需要对象引用
- firebase - 颤振/飞镖如何检查文件是否存在于firestore中?
- c# - 面没有完全绘制和消失
- git - 修改 git 提交,并在一个命令中应用到所有后续分支
- google-bigquery - 标准sql:将数组中的字符串转换为float64
- uwp - 如何授权访问应用程序路径?