首页/数据/NoSQL 速查/时序数据模型:measurement/tag/field/timestamp

时序数据模型:measurement/tag/field/timestamp

时序库按"测量对象 + 标签集 + 字段集 + 时间戳"组织数据:标签用于检索与分组、字段存测量值;同一 measurement 与标签组合构成一个 series(序列)。

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

时序数据模型长什么样

时序库按「测量对象 + 标签集 + 字段集 + 时间戳」组织数据:measurement 是逻辑上的测量对象,tag 是用于检索与分组的维度键值,field 是真正的测值,timestamp 标记时刻。同一 measurement 与同一组 tag 取值构成一个 series,序列数量决定了内存与索引压力。

基本信息

measurement逻辑测量对象,如 cpu、http_requests
tag字符串键值,会建索引,用于筛选与分组;组合决定序列基数
field实际测值,不建索引,是聚合计算的目标
timestamp纳秒精度的时刻,写入与查询都以时间范围为主轴
seriesmeasurement 与 tag 组合的唯一实例,构成一条独立时间线

典型使用场景

  • 指标建模:先确定哪些维度是可检索的 tag
  • 容量评估:估算 tag 组合数量,判断序列基数是否可控
  • 查询设计:先用 tag 缩小范围,再对 field 做聚合计算
  • 数据核对:按 measurement 与 tag 检查数据完整性
  • 排查高基数问题:定位把序列数推高的那个 tag

行协议与对照

行协议与对照
# InfluxDB 行协议:measurement,tag=值 field=值 时间戳
cpu,host=web-1,region=cn usage=0.73,idle=0.21 1719792000000000000

# 结构化对照
# |cpu|      |---- tags ----|      |------- fields -------|   |--- timestamp ---|
#  测量对象     检索与分组维度           实际测值(聚合目标)           纳秒时刻

# 先用 tag 缩小范围,再对 field 聚合
SELECT mean("usage") FROM "cpu" WHERE "host" = 'web-1' AND time > now() - 1h GROUP BY time(5m)

四要素对照

要素是否建索引典型内容放错的影响
measurement—cpu、http_requests粒度混乱会让查询跨对象
tag是host、region、status高变化值当 tag 会瞬间推高序列基数
field否usage、latency、count把维度放进 field 就无法按它分组
timestamp时间索引纳秒时间戳精度不一致会造成时间点对齐困难
建模的核心只有两个问题:哪些维度放 tag(可检索、影响基数),哪些放 field(只做统计)。放错会同时影响写入性能与查询体验,事后调整模型基本等于重写历史数据。
写入时 tag 的顺序不影响序列归属,但同一条序列的字段集应保持一致;前后写入的 field 不一致会在查询结果里产生空值列,聚合前先用过滤条件固定字段,结果才可比。

易错点

  • 把进程 ID、请求 ID 这类高变化值当 tag 会瞬间推高序列基数,内存与索引迅速膨胀,应当放 field 或直接丢弃
  • tag 的取值类型固定为字符串,写数字标签后比较按字符串进行,范围查询语义与预期不符
  • field 不建索引,把需要筛选的维度放进 field 后无法高效过滤,只能退化成大范围时间扫描
  • 时间戳精度不统一(秒与纳秒混写)会让同一条时间线上的点对齐错乱,写入前必须统一精度

数据来源与参考

  • InfluxData Docs: Data model
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌