首页/数据/NoSQL 速查/降采样聚合口径设计

降采样聚合口径设计

降采样不只是求平均:每层保留哪些统计量决定了上层还能回答什么问题;常见组合是保留 avg、max、min、sum 与 count,让上层可加权合并再算。

NoSQL 速查数据更新于 2026-10-13

降采样聚合口径是什么

降采样不只是「求个平均」:每层保留哪些统计量,决定了上层还能回答什么问题。可以跨层回算的指标是 sum 与 count(加权平均等于 sum(sum_value) 除以 sum(count)),只保留 avg 就无法合并出正确的总平均。常见做法是原始层保留数天,随后 1 分钟、1 小时、1 天逐层减采样并延长保留期,让报表查高层、故障定位查原始层。

基本信息

可回算指标sum 与 count 可跨层合并(加权平均 = sum(sum) / sum(count))
不可回算只存 avg 无法合并出正确总平均
常见层级10s → 1m → 5m → 1h → 1d
保留策略越上层保留越久,越底层保留越短
所属系统时序数据库通用的降采样设计

典型使用场景

  • 长期趋势图:按小时或天查询,直接读高层聚合结果
  • 故障定位:回到原始层看秒级细节
  • 容量控制:用降采样减少长期存储的数据点数量
  • 口径统一:把聚合口径写进任务定义,避免各团队各算一套
  • 跨层校验:用高层数据与原始层重算结果做抽样比对

分层字段设计

分层字段设计
原始层(10 秒精度,保留 7 天)
  字段:value

1 分钟层(保留 90 天)
  字段:sum_value, count, max_value, min_value

1 小时层(保留 2 年)
  字段:sum_value, count, max_value, min_value

# 上层求平均:sum(sum_value) / sum(count),不要对平均值再取平均

统计量能否回算

统计量跨层合并说明
sum可以各窗口直接相加
count可以相加后用于加权平均
avg不可以必须由 sum 与 count 重新计算
max / min可以上层取各窗口的极值
last视实现只在同粒度下有明确含义
SLA 与容量报表通常查高层聚合,故障定位查原始层,两层口径要在文档里写清楚,避免各团队算出来的数字对不上。
只存平均值会让上层无法再聚合,事后补字段意味着重算历史并回填,代价远高于一开始就存 sum 与 count。
分层窗口不是整数倍关系(例如 5 分钟到 1 小时)时边界处理要显式对齐,否则跨层累加会出现误差。

易错点

  • 只存平均值让上层无法再聚合,事后补字段要重算历史并回填
  • 分层窗口不是整数倍关系(如 5m 到 1h)时边界处理要显式对齐,避免跨层累计误差
  • 把降采样任务当一次性的:新增指标或口径变更后要同步更新任务并回填历史
  • 高层与原始层口径不一致又没有抽样校验,差异往往在月度对账时才暴露

数据来源与参考

  • InfluxData Docs: Downsample data
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌