数据模型

数据模型

在 InfluxDB 中,时序数据支持多值模型,它的一条典型的时间点数据如下所示:

InfluxDB 数据模型

  • measurement: 指标对象,也即一个数据源对象。每个 measurement 可以拥有一个或多个指标值,也即下文所述的 field。在实际运用中,可以把一个现实中被检测的对象(如:“cpu”)定义为一个 measurement

  • tags: 概念等同于大多数时序数据库中的 tags, 通常通过 tags 可以唯一标示数据源。每个 tag 的 key 和 value 必须都是字符串。

  • field: 数据源记录的具体指标值。每一种指标被称作一个“field”,指标值就是 “field”对应的“value”

  • timestamp: 数据的时间戳。在 InfluxDB 中,理论上时间戳可以精确到 纳秒(ns)级别

在 InfluxDB 中,measurement 的概念之上还有一个对标传统 DBMS 的 Database 的概念,逻辑上每个 Database 下面可以有多个 measurement。在单机版的 InfluxDB 实现中,每个 Database 实际对应了一个文件系统的目录。

Serieskey

InfluxDB 中的 SeriesKey 的概念就是通常在时序数据库领域被称为 时间线 的概念, 一个 SeriesKey 在内存中的表示即为下述字符串(逗号和空格被转义)的字节数组(github.com/influxdata/influxdb/model#MakeKey())。

{measurement名}{tagK1}={tagV1},{tagK2}={tagV2},...

其中,SeriesKey 的长度不能超过 65535 字节

Field 类型

InfluxDB 的 Field 值支持以下数据类型:

Datatype Size in Mem Value Range
Float 8 bytes 1.797693134862315708145274237317043567981e+308 ~ 4.940656458412465441765687928682213723651e-324
Integer 8 bytes -9223372036854775808 ~ 9223372036854775807
String 0 ~ 64KB String with length less than 64KB
Boolean 1 byte true 或 false

在 InfluxDB 中,Field 的数据类型在 同一Serieskey + 同一field + 同一shard 范围内必须保持不变,否则写数据时会报错类型冲突。

Shard

在 InfluxDB 中,能且只能 对一个 Database 指定一个 Retention Policy (简称:RP)。通过 RP 可以对指定的 Database 中保存的时序数据的留存时间(duration)进行设置。而 Shard 的概念就是由 duration 衍生而来。一旦一个 Database 的 duration 确定后, 那么在该 Database 的时序数据将会在这个 duration 范围内进一步按时间进行分片从而时数据分成以一个一个的 shard 为单位进行保存。

shard 分片的时间 与 duration 之间的关系如下:

Duration of RP Shard Duration
< 2 Hours 1 Hour
>= 2 Hours 且 <= 6 Months 1 Day
> 6 Months 7 Days

建的 Database 在未显式指定 RC 的情况下,默认的 RC 为 数据的 Duration 为永久,Shard 分片时间为 7 天。在闭源的集群版 Influxdb 中,用户可以通过 RC 规则指定数据在基于时间分片的基础上再按 SeriesKey 为单位进行进一步分片

上一页