在上一篇《如何应对物联网时代数据爆炸式增长? CirroData-TimeS时序数据库来了!》中,我们介绍了超高性能时序数据库CirroData-TimeS的数据建模方式和性能。CirroData-TimeS在插入性能、查询性能,以及压缩比测试中都远超InfluxDB,而其所支持的分布式时序数据库在具备高可用性的同时,性能仍能达到单机性能的80%,完全能够应对物联网大爆发的数据场景需求。
本篇将揭示CirroData-TimeS极致性能背后的核心技术之一:文件存储格式。
一、时序数据的特征
时序数据具有如下特征:
- 数据是时序的,即一定带有时间戳。
由于时序数据是某个测点,或是某个事件源持续不断的产生的,产生数据的时间点对于追溯、分析这个时间下测点,事件的状态非常重要,所以时序数据一般都带有时间戳,这个是时序数据最大的特征。 - 按时间范围读取
通常来说,一般不会关心某个特定点的数据,而且关注一段时间的数据,关注这段时间之内的数据的走势。 - 聚合查询价值高
用户会对某段时间之内某些测点的一些聚合值感兴趣,比如count、avg、max、last_value、first_value等。 - 时间序列多大千万级甚至亿级别
由于入网设备的增多,测点数量增加,时间序列就会越来越多,如何管理和存储这些时间序列元信息,也是将要面临的挑战。 - 数据量大,存储成本高
由于测点数据是不间断持续写入的,随着入网设备逐渐增加,数据量将会越来越大,会占用大量的磁盘空间,这就要求时序数据库具有较高的压缩比,能够节省磁盘空间。
二、文件存储方式
文件存储格式主要有两类:行存和列存。
假设有如下数据。
1、行存
行存如下图所示:
- 每行数据连续存储
- 行和行之间顺序存储
- 典型的代表有Apache Avro