华为云FusionInsight MRS基于Apache IoTDB打造时序数据库引擎
背景
在当前大数据,物联网飞速发展,有数据统计显示,预计到 2025 年,全球物联网设备的数量可达非物联网设备数量的 3 倍以上,因此由物联设备产生的时序数据将大幅度增长。华为云FusionInsight MRS将Apache IoTDB和逻辑数据湖结合,利用FusionInsight MRS HetuEngine实时分析引擎可以将时序数据和湖内其他类型数据进行实时关联分析,达到湖内数据“0”搬迁,高性能分析的能力。
时序数据库优势
时序数据库简介
时序数据库是时间序列数据库的简称,指的是专门对带时间标签(按照时间的顺序变化,即时间序列化)的数据进行存储、查询、分析等处理操作的专用数据库系统。通俗来说,时序数据库就是专门用来记录例如物联网设备的温度、湿度、速度、压力、电压、电流以及证券买入卖出价等随着时间演进不断变化的各类数值(测点、事件)的数据库。
时序数据库解决的痛点
- 海量设备带来的写入压力,数据产生速度快,总量大
- 如何高效存储大量维度相同仅值和时间戳不同的数据
- 在海量数据下提供毫秒级的分析和查询能力
Apache IoTDB的原理
图1-1 Apache IoTDB架构图
Apache IoTDB提供了高性能的读写,高可靠性,多生态能力。如图所示,为IoTDB整理架构图,通常数据有两种来源,一种是来自设备通过IoT Edge SDK 使用物联网MQTT协议直接写入到IoTDB中;另外一种是其他数据中心的数据采集后使用Kafka或者Flink经过计算或者过滤,然后写入到IoTDB。上层业务可以通过JDBC/API等多种访问接口进行分析和预警,以及对接Grafana可视化界面。同时大数据和人工智能平台可以利用API接口直接分析Tsfile文件,也可以通过jdbc方式读取数据进行分析。
以下将对核心技术优势进行深度解析:
图1-2 写入流程图
写入速度快: 如图1-2所示,在LSM-Tree的基础上,引入了tLSM算法。此算法将乱序数据和顺序数据进行隔离,互不影响,加速了顺序数据的WAL和Memtable落盘到tsfile中。使用单独的线程定期将乱序数据合并到顺序tsfile中,重建tsfile索引,保证整个Tsfile数据集是有序,并且在Tsfile中使用chunk index和Bloom Filter,这样在写入快的同时不影响查询速度。此算法在国际数据库顶级会议ICDE 2022已发表。
图1-3 TsFile结构图
压缩率高:如图1-3所示,自研的Tsfile列式存储,一个chunk中保存着一个测点的一段时间的有序数据。同时在chunk块中进行Snappy压缩,由于chunk中的数据是有序,并且有序的时间戳压缩空间较大,因此可以增大压缩效率。 同时针对chunk块,也提供了一些编码方式,也可以大大节省空间。
二阶差分编码(TS_2DIFF)
二阶差分编码,比较适合编码单调递增或者递减的序列数据,不适合编码波动较大的数据。
游程编码(RLE)
游程编码,比较适合存储某些整数值连续出现的序列,不适合编码大部分情况下前后值不一样的序列数据。
GORILLA编码(GORILLA)
GORILLA编码是一种无损编码,它比较适合编码前后值比较接近的数值序列,不适合编码前后波动较大的数据。
定频数据编码 (REGULAR)
定频数据编码,仅适用于整形(INT32)和长整型(INT64)的时间列定频数据,且允许数据中有一些点缺失,使用此方法编码定频数据优于二阶差分编码(TS_2DIFF)。
由于时序数据库主要存储的是时序数据,针对时序数据做了一系列的优化,但是也增加了自身的局限性。在结构化,半结构化,非结构化数据存储和查询上存在不足。
MRS 时序数据库优势
华为云FusionInsight MRS时序数据库基于Apache IoTDB基础上推出的高性能企业级时序数据库产品。识别到时序数据库短板,将Apache IoTDB和MRS逻辑数据湖进行结合和优化。
图1-4 MRS时序数据库
如图1-4所示,结构化,半结构化,非结构化的数据,通过批/流写入到Hive或者HBase中。时序数据通过Kafka/Flink写入到IoTDB中。通过利用HetuEngine 交互式分析&多源统一SQL能力,将多种存储数据进行联合分析。MRS时序数据库的能力如下:
- 多源异构计算:构筑统一数据视图,一条SQL实现多源协同,数据零搬迁。
- 智能加速:基于收益最大化原则,实现对热查询的自动识别、预计算与在线分析加速,IO降低90%;
- 高并发高可用:算力、并发可横向扩展,弹性伸缩,自动路由,自动实时调配超大SQL的计算规模;
MRS时序数据库应用
业务场景
某电力公司将电表采集的时序数据保存在IoTDB中,将电表的位置信息保存在了Hive中,数据库表如下:
图1-5 Hive and IoTDB表结构
电网中的时序数据一般是指由电力设备传感器产生的一段和时间先后顺序相关的一类数据。如上图所示,对于电网中的电表设备,其电流值就是典型的时序数据。
一条时序数据记录一般可定义为三元组: < MeasurementlD, Timestamp, Value>
MeasurementlD: 产生该条数据的传感器
TimeStamp:为记录产生的时间戳
Value : 为测点具体的值。
电表的描述信息是传统的结构化数据,如果用时序数据库的标签进行存储,那么标签量将很大,并且丢失了灵活性,因此使用Hive进行存储,并且此电表描述信息可以提供给Spark进行离线分析使用,这样就不会进行冗余存储,能够节省空间。一条电表描述信息包括:电表编号,户主,身份证号,省,市,县等。
此功能计划实现某地市县区,在某段时间的电量使用平均值。基于上面的存储模型和方式,下面将从两个方案进行描述:传统方案和MRS时序数据库方案。
原始实现方案
图1-6 原始方案架构图
传统方案需要业务进行二次开发实现,将不同数据源中的数据读取到内存中进行计算。具体如下:
- 首先从Hive库中查询出县区所有电表id。
- 用电表Id在IoTDB时序数据库中计算每一个电表在某段时间电量使用平均值。
- 将所有电表计算的平均值,二次求取平均值。
此方案不足:
- 上层业务需要下发两次SQL查询以及内存中的二次计算,性能较低。
- 增加了业务开发的难度,降低了易用性。
MRS时序数据库实现方案
图 1-7 MRS时序数据库方案
MRS时序数据库方案充分利用离线数据湖的特性,将IoTDB和Hive进行关联分析。具体如下所示:
- 首先利用HetuEngine智能加速,弹性伸缩,自动诊断等能力,性能大幅度提升。
- 上层业务只需要一个SQL就可以实现功能,提升易用性。
- 点赞
- 收藏
- 关注作者
评论(0)