物联网(InternetofThings,简称IoT)是指通过各种信息传感、通信和IT技术来实时连接、采集、监管海量的传感设备,从而实现对现实世界的精确感知和快速响应,继而实现自动化、智能化管理。在查询IoT设备状态的场景下,吞吐量和时延是两个重要的性能指标。
在工业物联网中,常见有以下几种设备时序数据的查询需求:
案例1:查询某个设备最近的记录
案例2:查询某个租户所有设备的最近一条记录
案例3:查询某个设备最近5分钟的统计信息
案例4:查询某个设备最近一天的秒级数据
本教程通过一个工业物联网的案例,来演示DolphinDB的序列查询性能,并对比测试了DolphinDBTSDB引擎、OLAP引擎,以及ClickHouseMergeTree引擎在上述查询案例上的时延指标。总体来说,DolphinDBTSDB引擎的性能(时延)对比DolphinDBOLAP引擎和ClickHouseMergeTree引擎有显著优势。
本教程参考了某工业物联网SaaS平台服务商的数据集,模拟并使用一份高度仿真的数据。该SaaS服务商的主要业务是监控各个地区的噪声情况。表结构如下:
使用DolphinDBTSDB引擎,创建一个名为NoiseDB的数据库,存储噪声数据。TSDB引擎是DolphinDB自2.00版本起,专门为物联网场景设计研发的数据存储引擎,具备优秀的写入和序列查询性能。
可以通过SQL查询验证下数据集大小:
导入完成后,每个分区下生成3个level0file,未满足自动合并条件(大于等于10个levelFile),需要进行手动合并。
完成后将案例数据导出数据至csv文件,以便后续导入OLAP引擎、ClickHouse。在ClickHouse中使用OPTIMIZETABLEnoise合并下mergeTree。具体过程参照附录ClickHouse脚本。
在DolphinDB中,可以使用SQL快速实现4个设备状态查询需求,并且代码十分简洁。
案例1:查询某个设备最近的100条记录:
案例2:查询某个租户所有设备最新状态
案例3:查询某个设备5分钟内的噪声统计值
案例4:查询某个设备最近一天的明细数据
注:首次查询指未命中数据库缓存及操作系统缓存的查询。
进一步测试DolphinDBTSDB引擎与OLAP引擎,以及ClickHouseMergeTree引擎在上述数据集的时序查询性能。测试过程中尽可能地保持环境变量相同,以保证科学有效。具体测试脚本详见附录。
测试环境
测试机器配置
操作系统:CentOS7
CPU:2cores
内存:10G
磁盘:SSD
核心测试参数
对测试中影响性能的关键参数,保持对等一致。
测试时,DolphinDB和ClickHouse均采用单节点,并分配8G最大内存。在引擎方面,DolphinDBTSDB引擎,ClickHouseMergeTree引擎的内部实现都采用了LSM-tree。并保持库表设计完全一致。
测试结果
三者的具体测试结果为下表,表中数值为平均耗时/首次查询耗时(单位ms),平均耗时的计算逻辑为:
平均耗时=(首次耗时+9次缓存命中耗时)/10
可以看出,OLAP引擎和ClickHouse在不同的查询场景下性能各有其优势和劣势。
DolphinDBTSDB引擎在物联网场景有着卓越的点查性能,可以以毫秒级延时迅速响应设备的状态信息,其性能更优于ClickHouse的MergeTree引擎。