时序数据库介绍和使用
1. 基础
1.1 关于时序数据的定义内容
时间序列数据(Time Series Data, TSD),从定义上来说,就是一串按照时间维度索引的数据.这一串数据描述了某个被测量的主题在一个时间范围内的每个时间点上的测量值.
对时序数据进行建模的话,会包含三个重要部分,分别是:主体,时间点和测量值。套用这套模型,你会发现你在日常工作生活中,无时无刻不在接触着这类数据。
- 如果你是一个股民,某只股票的股价就是一类时序数据,其记录着每个时间点该股票的股价。
- 如果你是一个运维人员,监控数据是一类时序数据,例如对于机器的CPU的监控数据,就是记录着每个时间点机器上CPU的实际消耗值。
时序数据从时间维度上将孤立的观测值连成一条线,从而揭示软硬件系统的状态变化。孤立的观测值不能叫时序数据,但如果把大量的观测值用时间线串起来,我们就可以研究和分析观测值的趋势及规律。
1.2 时序数据的特点
1.2.1 时序数据的数学模型
这里以腾讯CTSDB为准介绍:
- measurement: 度量的数据集,类似于关系型数据库中的 table;
- point: 一个数据点,类似于关系型数据库中的 row;
- timestamp: 时间戳,表征采集到数据的时间点;
- tag: 维度列,代表数据的归属、属性,表明是哪个设备/模块产生的,一般不随着时间变化,供查询使用;
- field: 指标列,代表数据的测量值,随时间平滑波动,不需要查询。
下面为一段时序数据,记录了一段时间内的某个集群里各端口的出入流量,每半小时记录一个观测值.
如上图所示,这组数据的measurement为network,每个point由以下部分组成:
- timestamp:时间戳
- 两个tag:host、port,代表每个point归属于哪台机器的哪个端口.
- 两个field:bytes_in、bytes_out,代表piont的测量值,半小时内出入流量的平均值
同一个host、同一个port,每半小时产生一个point,随着时间的增长,field(bytes_in、bytes_out)不断变化。如host:host4,port:51514,timestamp从02:00 到02:30的时间段内,bytes_in 从 37.937上涨到38.089,bytes_out从2897.26上涨到3009.86,说明这一段时间内该端口服务压力升高。
1.2.2 时序数据特点
- 数据模式: 时序数据随时间增长,相同维度重复取值,指标平滑变化:这点从上面的Network表的数据变化可以看出.
- 写入: 持续高并发写入,无更新操作:时序数据库面对的往往是百万甚至千万数量级终端设备的实时数据写入(如摩拜单车2017年全国车辆数为千万级),但数据大多表征设备状态,写入后不会更新。