首先,什么是时序数据?
简单来说,时序数据就是按照时间维度索引的数据,比如车辆轨迹数据,传感器温度数据。随着物联网时代的到来,时序数据的数据量呈井喷式爆发,针对于这一数据细分的优化存储显得越来越重要。
01 什么是InfluxDB
InfluxDB是一个开源的、高性能的时序型数据库,在时序型数据库DB-Engines Ranking上排名第一。
在介绍InfluxDB之前,先来介绍下时序数据。按照时间顺序记录系统、设备状态变化的数据被称为时序数据(Time Series Data),如CPU利用率、某一时间的环境温度等。
时序数据以时间作为主要的查询纬度,通常会将连续的多个时序数据绘制成线,制作基于时间的多纬度报表,用于揭示数据背后的趋势、规律、异常,进行实时在线预测和预警,时序数据普遍存在于IT基础设施、运维监控系统和物联网中。
那么时序数据有什么特点呢?针对于这些特点我们怎么去优化存储呢?
一般的时序数据都会有这几个属性:
度量的数据集(measurement),类似于关系型数据库中的 table;
一个数据点(point),类似于关系型数据库中的 row;
时间戳(timestamp),表征采集到数据的时间点;
维度列(tag),代表数据的归属、属性,表明是哪个设备/模块产生的,一般不随着时间变化,供查询使用;
指标列(field),代表数据的测量值,随时间平滑波动。
如下图所示的数据:
对于时序数据,我们总结了以下特点:
1.数据特点:数据量大,数据随着时间增长,相同维度重复取值,指标平滑变化(某辆车的某个设备上传上来平滑变化的轨迹坐标)。
2.写入特点:高并发写入,且不会更新(轨迹不会更新)。
3.查询特点:按不同维度对指标进行统计分析,存在明显的冷热数据,一般只会查询近期数据(一般我们只会关心近期的轨迹数据)。
时序数据的几个特点
1. 基本上都是插入,没有更新的需求。
2. 数据基本上都有时间属性,随着时间的推移不断产生新的数据。
3. 数据量大,每秒钟需要写入千万、上亿条数据
时间是一个主坐标轴。
业务方常见需求
1. 获取最新状态,查询最近的数据(例如传感器最新的状态)
2. 展示区间统计,指定时间范围,查询统计信息,例如平均值,最大值,最小值,计数等。。。
3. 获取异常数据,根据指定条件,筛选异常数据
2.大量的统计查询要求,查询一定时间范围内的计数、最大值、最小值和平均值。
监控软件系统: 虚拟机、容器、服务、应用
监控物理系统: 水文监控、制造业工厂中的设备监控、国家安全相关的数据监控、通讯监控、传感器数据、血糖仪、血压变化、心率等
资产跟踪应用: 汽车、卡车、物理容器、运货托盘
金融交易系统: 传统证券、新兴的加密数字货币
事件应用程序: 跟踪用户、客户的交互数据
商业智能工具: 跟踪关键指标和业务的总体健康情况
在互联网行业中,也有着非常多的时序数据,例如用户访问网站的行为轨迹,应用程序产生的日志数据等等
那么时序数据库和传统的大数据存储解决方案到底有哪些本质区别呢?
我觉得最重要的区别就是结构化数据。
1.存储的是结构化数据。我们都知道传统的大数据方案要存储的数据包含结构化,半结构化,非结构化的数据,这样就决定了我们不能决定有哪些字段以及定义各个字段的数据类型,像hbase就是通过byte类型统一存储的,也就是说放到hbase中的数据都是byte数组,从普通类型转换成byte数组需要我们自己来做,我们并不知道怎样转换成byte它的存储效率会更高。但是时序数据产生的数据都是结构化的数据,我们可以事先定义好数据的字段以及类型,让数据库系统根据不同的字段类型选择最优的压缩方式,大大提高存储的利用率。
2.分析聚合的是结构化数据。既然分析聚合是结构化数据,那么我们就不需要使用mapreduce那种复杂的计算工具、一般也不需要hive那种数据仓库,而只需要在数据库存储层面内聚类似于sum、avg在这种计算工具就可以了,甚至还可以做一些简单的流式计算,为‘超融合’提供了基础(超融合就是说将类似于之前对于大数据处理方案的多个组件融合成一个组件,主要还是因为结构化数据太简单了,收集计算等都比较简单,这也是后续时序数据库的发展趋势,减少系统复杂度)。
InfluxDB是一款非常优秀的软件,直接推动监控技术进入了实时、纳秒级的新时代,除了类SQL查询语言、RESTful API等现代特性外,还具有读写性能高、存储压缩率高、生态丰富、功能强大等特性。