关于Firebase Firestore中统计数据存储方案的咨询
Firestore 统计结果存储方案选型参考
两种可选存储结构对比
你提到的两种存储方式本质都属于单文档全量存储,差异仅在于是否用map做层级隔离:
1. 以日期为顶层字段直接存储
- 优势:读写操作不需要处理额外层级,语法更简洁
- 劣势:如果后续需要在同文档内增加周汇总、月汇总等其他统计字段,很容易和日期字段出现命名冲突,结构混乱
2. 封装为map字段存储(单文档场景下优先选择)
- 优势:结构清晰,所有日维度统计数据统一归属于同一个map字段,和其他统计字段完全隔离,不会出现命名冲突,后续维护成本低
- 劣势:读写时需要多一层map的层级操作,代码复杂度提升极小
两种单文档存储的共同限制:Firestore单文档最大容量为1MB,按天存储的情况下最多可支撑约90年的统计数据存储,同时仅适合全量拉取历史数据的场景,无法直接做时间范围过滤,查询某一时间段数据时需要拉取全量文档后自行筛选。
更适合范围查询的优化方案
如果你后续有按时间段读取历史数据的需求,更建议采用分文档存储的方式:
- 在statistics集合下,每个日期对应一条独立文档,文档ID直接使用日期字符串(如
2024-05-01) - 每条文档内仅需设置
specimenCountSum字段存储当日求和值即可
这种方案的优势: - 不存在单文档容量上限,可无限扩展存储历史数据
- 支持直接用Firestore的范围查询语法拉取指定时间段的统计数据,不需要拉取全量数据,读取效率更高、成本更低
- 写入时可直接用批量写入接口一次性更新一周的所有统计文档,操作效率高
内容的提问来源于stack exchange,提问作者Martin
相关产品推荐
相关产品推荐

