数据模型

数据模型

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

InfluxDB 数据模型

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

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

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

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

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

Serieskey

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

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

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

Field类型

InfluxDBField值支持以下数据类型:

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 truefalse

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

Shard

InfluxDB中,能且只能 对一个Database指定一个Retention Policy (简称:RP)。通过RP可以对指定的Database中保存的时序数据的留存时间(duration)进行设置。而Shard的概念就是由duration衍生而来。一旦一个Databaseduration确定后,那么在该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为单位进行进一步分片

上一页