CirroData-TimeS介绍
CirroData-TimeS是一体化收集、存储、管理与分析物联网时序数据的软件系统。CirroData-TimeS采用轻量式架构,具有高性能和丰富的功能,并与Apache Hadoop、Spark和Flink等进行了深度集成,可以满足工业物联网领域的海量数据存储、高速数据读取和复杂数据分析需求。
首先来看一下CirroData-TimeS一些基本的概念。
存储组(Storage Group)
一个工厂或设备组。
设备(Device)
一个机器或者设备实例。
传感器(Measurement,Sensor)
机器或设备上的传感器,也称之为测点。
时间序列(Timeseries)
由存储组+设备+传感器组成的一个的字符串称之为一个时间序列。
拿上面的例子做一下说明,比如某工厂是factory1,则存储组是root.factory1,root是系统保留关键字;设备有3个,分别为device1,device2,device3;每个设备目前只有1个测点就是temperature,则会产生3条时间序列并且其代表的意义如下所示:
root.factory1.device1.temperature:工厂1的设备1的温度
root.factory1.device2.temperature:工厂1的设备2的温度
root.factory1.device3.temperature:工厂1的设备3的温度
如果每个设备下面不仅有温度一个测点,还有水压这个测点(pressure),则会产生6条时间序列并且其代表的意义如下所示:
root.factory1.device1.temperature:工厂1的设备1的温度
root.factory1.device1.pressure:工厂1的设备1的水压
root.factory1.device2.temperature:工厂1的设备2的温度
root.factory1.device2.pressure:工厂1的设备2的水压
root.factory1.device3.temperature:工厂1的设备3的温度
root.factory1.device3.pressure:工厂1的设备3的水压
其树形结构如下所示:
为了便于理解,可以用关系型数据库的概念来对应上述概念,存储组相当于关系型数据库的database的概念;设备相当于一张表,每个传感器相当于列。则上述时间序列相当于有如下database和表。
database:factory1
table:device1、device2、device3
每个表的结构如下所示:
CirroData-TimeS在存储这些数据的时候,针对上述模型设计了自己独有的存储引擎。CirroData-TimeS会对每个设备建立一个索引,通过这个索引,可以快速的定位到查询某个设备的数据所在的文件。而且文件头部记录有数据的开始时间、起止时间、此文件包含的时序等一些元数据信息,通过此元数据信息可以快速的筛选出想要查询的数据。同时CirroData-TimeS还有数据时间分区的功能,即会把某一段时间的数据保存在一个时间分区的文件夹下,这样用户查询某段时间的数据的时候,就会很快定位到所在的文件,会大大提升查询性能。所以对于上面的两种查询需求,CirroData-TimeS都可以在很短的时间内返回查询结果。
了解了CirroData-TimeS的数据模型之后,我们先看下其性能如何。
我们与目前市面上比较流行的InfluxDB做了插入、查询以及压缩比的测试。CirroData-TimeS的版本是0.10,InfluxDB的版本是1.8。我们设计了如下两种负载:6000测点和200万测点,分别模拟测点少和测点多的情况下,系统的性能表现。
6000测点配置是20个存储组,20个设备,每个设备300个测点;200万测点配置是20个存储组,1000个设备,每个设备2000个测点。
测试结果如下所示。
通过下图可以看到,不管是在6000测点还是在200万测点的情况下,CirroData-TimeS的性能都要远远高于InfluxDB。
再看一下常用的聚合查询的性能,Q1是带时间过滤的聚合查询,Q2是带值过滤的聚合查询,6000测点查询结果集约为100万点,200万测点的查询结果集约为10万点。
可以看到不管在6000测点还是在200万测点下,CirroData-TimeS查询延迟要比InfluxDB低很多。
如下测试是对比CirroData-TimeS和InfluxDB的压缩比,每个点数据是12byte,总数据量大约为112GB,可以看到CirroData-TimeS是InfluxDB的5倍,CirroData-TimeS的压缩比可以达到13倍。
以上都是测试单机的性能,CirroData-TimeS不仅仅支持单机,也提供了基于raft协议的分布式高可用版本,如下是3节点3副本的分布式和单机性能对比。
可以看到CirroData-TimeS分布式性能可以达到约单机性能的80%。
通过以上可以看到,CirroData-TimeS是为了应对未来IoT大爆发而产生的专门用来处理时序数据的数据库,在写入、查询、压缩率等上面均有较高的性能,同时也实现了基于raft协议的分布式高可用版本。那么CirroData-TimeS是怎样完成如此高的压缩比、如此高的写入速度、如此高效的查询呢?其raft协议如何能够达到这么的性能?我们将在接下来的一系列文章中进行解密。
CirroData-TimeS时序数据库是基于开源Apache IoTDB改进、东方国信深度参与的国产时序数据库。CirroData-TimeS时序数据库团队有2名Apache IoTDB Committer。
参考文献