在云服务硬件环境下,IoTDB 写入、查询、利用资源能力均表现出色!
之前,我们为大家介绍了基于 IoTDB 的企业级产品 TimechoDB,在 TPCx-IoT 基准测试中打破世界纪录,取得的双指标第一成绩,和选择 TPCx-IoT 的原因解读。
今天我们来完成之前的 flag 啦!我们将根据发表的论文《Performance Evaluation of TimechoDB using TPCx-IoT Benchmark》,完整“复盘” IoTDB 在 TPCx-IoT 的测试运行过程,并进行结果分析。
IoTDB 低成本、高可用的出色性能表现,将完整体现!
01
测试细节解读:实验设置
数据库版本:本次测试的是基于 Apache IoTDB 的 TimechoDB,版本为 1.3.2.2。
硬件配置:在 5 个阿里云弹性计算服务实例(ECS)上进行了实验,其中 2 个作为 Cluster Node,3 个作为 Client Node。下表展示了 Cluster Node 的系统配置。Client Node 配置与Cluster Node 相似,唯一的区别是磁盘容量(Client Node 仅使用 1 个 128 GB 的 SSD,不同节点之间的带宽为 64 Gbps)。
数据负载:实验设置总写入的数据点数分别为 18,000,000,000 和 21,000,000,000,将模拟 120 个变电站的数据,其中每个变电站有 200 个设备,每个设备有 1 个测量点,每个测点的数据是一个 1k 字节的字符串。这些数据点在所有 Cluster Node 的所有进程中平均分配。
实验设置:使用 TPCx-IoT Benchmark(后文简称 Benchmark)对上述数据负载进行压测,压测每个 Client Node 会开启 40 个进程来运行 Benchmark,其中每个进程会启动 10 个线程。每个进程将以 100 毫秒的间隔独立生成数据点,每个数据点来自一个随机设备(符合均匀分布)。
02
测试细节解读:实验部署
我们在两个的 Cluster Node 上部署了 IoTDB 集群,这两个 Cluster Node 保障了两路复制,并通过实时通信确保高可用性。然后,我们在另外 3 个 ECS 实例上部署了 TPCx-IoT Client Driver,这些实例作为 Client Node 向 Cluster Node 发送插入或读取请求。
下图展示了一个典型物联网系统在现实世界中的双层架构,以及映射到 Benchmark 所对应的实际物理部署,由此将现实世界的生产场景与 TPCx-IoT Benchmark 工作负载进行了等价映射。
横向来看,左侧是边缘层,由不同电力变电站的传感器生成数据,而右侧是网关层,负责数据接收和持久存储。
纵向来看,在模拟的“真实世界”中,每个电力变电站在 Benchmark 层面上都直接对应一个 TPCx-IoT 工作负载驱动程序的实例;一个驱动程序实例会从一个电力变电站生成传感器数据以及相应的查询语句;数据写入和查询请求会发送到 IoTDB 集群,这些集群充当网关侧的数据库管理系统。
在 IoTDB 中,时间序列标识符以树状结构组织,分为三个层级:database、device 和 sensor。在 TPCx-IoT 场景中,一个时间序列的例子可能表示为 “root.tpcxiotclient102.cent_9_Humidity.field0”。
其中,“root” 作为公共前缀,“tpcxiotclient1” 代表 Client Node 编号,而 “02” 表示进程编号,三者共同构成 database 标识符。“cent_9_Humidity” 在 IoTDB 中作为 device 标识符,而 “field0” 则作为 sensor 标识符。
03
测试细节解读:实验结果
在 TPCx-IoT 官方网站发布的排行榜上,我们注意到一些系统在测试时启用了 WAL,而另一些则没有。我们更倾向于启用 WAL,因为它可以增强数据的可靠性和一致性,而禁用 WAL 则可能降低存储成本并提高性能。因此,每种方法适合不同的应用场景。
为了全面而有说服力地验证 IoTDB 的性能,我们进行了两次测试:一次启用 WAL,另一次禁用 WAL。此外,我们每种场景都进行了 5 次测试,以确保实验结果的一致性和可重复性,而不是偶然的。
我们提交给 TPC 的最终结果如下。
开启 WAL
我们首先在开启 WAL 的情况下,使用上面描述的默认系统资源配置进行了测试。下表展示了 Run 1 和 Run 2 的测试指标。我们使用 8,260,764.81(较小的值)作为最终的 IoTps。由于 ECS 实例和数据库软件的总购买价为 288,471.48 美元,最终的性价比指标是 34.92 $/kIoTps。
关闭 WAL
我们随后在关闭 WAL 并增加数据写入总量的情况下进行了测试。下表展示了 Run 1 和 Run 2 的测试指标。我们将 10,671,241.41(较小的值)作为最终的 IoTps。由于 ECS 实例和数据库软件的总购买价格为 297,835.08 美元,最终的性价比指标为 27.91 $/kIoTps。
结果对比
截至 2024 年 7 月 24 日,性能排名第一的是 Machbase 7.0.6,IoTps 为 5,739,514。而在性价比方面,排名第一的是 Lindorm 3.4.10,Price/kIoTps 为 $35.66。通过比较,我们可以确认,无论是否开启 WAL,IoTDB 的性能和性价比都将超越所有提交的结果,成功达到榜首。
下图展示了在官方 TPC 网站上发布的 TPCx-IoT 结果和排名,可以看到基于 IoTDB 的 TimechoDB 目前排名第一。
下图展示了在两种不同场景下系统资源的利用情况。我们观察到无论是否启用 WAL,平均 CPU 利用率都是比较低的,这表明 Benchmark 主要是一个 I/O 密集型的工作负载。
相比开启 WAL 时,关闭 WAL 后 CPU 利用率从 8% 上升至 44%,而磁盘繁忙率和磁盘吞吐量则相应下降了约 40%。关闭 WAL 后,I/O 资源消耗显著减少,系统的瓶颈从磁盘转移到内存访问,因此虽然写入吞吐量有所提升,但增幅未能与 CPU 利用率的提升相匹配。
尽管 WAL 会增加磁盘 I/O 开销,往往成为性能瓶颈,但它能够显著提升数据库写操作的安全性和可靠性。在大多数场景中,开启 WAL 仍然是更优的选择,因此我们建议用户始终开启 WAL 以确保系统的可靠性。
04
结论与分析
通过上面的测试我们可以确认,IoTDB 在 TPCx-IoT Benchmark 中表现出色,无论是性能还是性价比均达到了第一,说明它能够在成本相对较高的云服务硬件环境下,最大限度利用资源,实现海量时序数据的高吞吐写入与低延迟查询。
这次测试也对消费者用户和物联网厂商在数据库选型时提供了参考价值,证明了 IoTDB 是物联网时序场景下的一款不错的产品选择。而它的优异性能得益于其先进的设计思想和实现技术,下面列举了若干影响性能的关键因素,但不限于此。
基于 IoT-LSM 的存储引擎:IoTDB 自研的 IoT-LSM(日志结构合并树)存储引擎经过深度优化,特别适合写入负载较重的场景,尤其是像 TPCx-IoT 这样的海量时间序列数据。它将排序和编码压缩的过程推迟到数据刷写到磁盘之前,从而创建了一个充分利用 CPU 和磁盘资源的流水线。
高性能批量化写入接口:IoTDB 原生支持高性能批量写入接口,能够缓存数据减少函数调用与数据结构的频繁申请。通过攒批,能够在 TPCx-IoT 中将多个设备在一段时间内产生的数据一次性发送给服务端,提升吞吐。
紧凑的 Apache TsFile 格式:TsFile 基于列式存储的格式,对每一列数据采用高效的编码压缩算法,这对于 TPCx-IoT 场景下的大 test 类型数据十分有效,大大减少了磁盘文件的大小,节省了 IO 开销对性能的负担。
多层次的统计信息:IoTDB 在内存中和 TsFile 中都维护了多层次的统计信息,这些信息非常适合 TPCx-IoT 中的范围查询,可以提前过滤掉不匹配的数据块,从而加快查询处理速度。
IoTDB 的这些设计特点使其在 TPCx-IoT Benchmark 中表现出色,证明了它适合处理复杂的物联网数据管理任务。高效的数据处理、强大的并发支持和有效的资源利用相结合,确保了 IoTDB 能够满足物联网环境的严格要求,提供可靠的高性能数据存储和检索解决方案。
规上企业应用实例
能源电力:中核武汉|国网信通产业集团|华润电力|大唐先一|上海电气国轩|清安储能|某储能厂商|太极股份|绍兴安瑞思
航天航空:中航机载共性|北邮一号卫星
钢铁冶炼:宝武钢铁|中冶赛迪
交通运输:中车四方|长安汽车|城建智控|德国铁路
智慧工厂与物联:PCB 龙头企业|博世力士乐|德国宝马|京东|昆仑数据|怡养科技