实验目的

  • 测试实现ID表前后、不同ID算法下IoTDB的写入性能
  • 测试实现ID表前后、不同ID算法下IoTDB的原始数据查询性能


硬件配置

  • 系统:4.4.0-186-generic #216-Ubuntu
  • CPU:8核,Intel(R) Core(TM) i7-10700 CPU @ 2.90GHz
  • 内存:16G


实验方法

使用IoTDB benchmark进行写入及查询性能测试,写入使用session insertTable,查询为原始数据查询

实现不同时间序列路径长度的方法为,修改benchmark项目中/core/src/main/java/cn/edu/tsinghua/iotdb/benchmark/conf/Constants.java文件中的如下字段:

public static final String DEVICE_NAME_PREFIX = "l1.l2.l3.l4.l5.d_";


实验配置

  • 总设备数:10000
  • 每个设备下的点数:100
  • 每个Tablet中的行数:100


实验结果

存储组数及并发数:20

写入性能

时间序列路径模板:root.test.g_1.l1.l2.l3.l4.l5.d_1.s_1


吞吐量(points / s)

吞吐量百分比

平均时延(ms)

P95时延(ms)

IoTDB 0.13

15650216.31100 %12.4013.61
不开启ID表15640592.1099.94 %12.4413.68

使用Plain ID方法的IoTDB (设备名ID化为原设备名)

16146229.15103.17 %12.0513.22

使用SHA256 ID方法的IoTDB (设备名ID化为SHA256值)

15928384.91101.78 %12.7414.42

时间序列路径模板:root.test.g_1.d_1.s_1


吞吐量(points / s)

吞吐量百分比

平均时延(ms)

P95时延(ms)

IoTDB 0.13

16439184.13100 %11.4212.96
不开启ID表16513849.23100.42 %11.4213.05

使用Plain ID方法的IoTDB (设备名ID化为原设备名)

16219284.1598.66 %12.3013.19

使用SHA256 ID方法的IoTDB (设备名ID化为SHA256值)

16012939.9197.41 %12.6614.95

查询性能

时间序列路径模板:root.test.g_1.l1.l2.l3.l4.l5.d_1.s_1


吞吐量(points / s)

吞吐量百分比

平均时延(ms)

P95时延(ms)

IoTDB 0.13

3053.98100 %2.139.95
不开启ID表3095.78101.38%2.119.13

使用Plain ID方法的IoTDB (设备名ID化为原设备名)

3048.23 99.84 %2.459.75

使用SHA256 ID方法的IoTDB (设备名ID化为SHA256值)

3066.15100.41 %2.138.93

时间序列路径模板:root.test.g_1.d_1.s_1


吞吐量(points / s)

吞吐量百分比

平均时延(ms)

P95时延(ms)

IoTDB 0.13

3098.29100 %2.429.58
不开启ID表3094.1999.87 %2.4410.02

使用Plain ID方法的IoTDB (设备名ID化为原设备名)

3109.85100.32 %2.439.98

使用SHA256 ID方法的IoTDB (设备名ID化为SHA256值)

3093.2999.87 %2.5910.24


存储组数及并发数:200

写入性能

时间序列路径模板:root.test.g_1.l1.l2.l3.l4.l5.d_1.s_1


吞吐量(points / s)

吞吐量百分比

平均时延(ms)

P95时延(ms)

IoTDB 0.13

17399875.14100 %108.99208.91
不开启ID表17400975.44100 %

109.24

205.49

使用Plain ID方法的IoTDB (设备名ID化为原设备名)

17892831.15102.82 %98.34191.58

使用SHA256 ID方法的IoTDB (设备名ID化为SHA256值)

17582939.94101.05 %105.25199.19

时间序列路径模板:root.test.g_1.d_1.s_1


吞吐量(points / s)

吞吐量百分比

平均时延(ms)

P95时延(ms)

IoTDB 0.13

17794721.14100 %94.28199.92
不开启ID表17619721.1499.01 %95.21201.20

使用Plain ID方法的IoTDB (设备名ID化为原设备名)

17482948.1598.25 %112.24209.28

使用SHA256 ID方法的IoTDB (设备名ID化为SHA256值)

17283384.9197.13 %119.67221.57

查询性能

时间序列路径模板:root.test.g_1.l1.l2.l3.l4.l5.d_1.s_1


吞吐量(points / s)

吞吐量百分比

平均时延(ms)

P95时延(ms)

IoTDB 0.13

3192.84100 %2.0110.28
不开启ID表3194.81100.06 %2.029.98

使用Plain ID方法的IoTDB (设备名ID化为原设备名)

3186.3599.81 %1.9910.04

使用SHA256 ID方法的IoTDB (设备名ID化为SHA256值)

3169.3999.28 %2.1411.37

时间序列路径模板:root.test.g_1.d_1.s_1


吞吐量(points / s)

吞吐量百分比

平均时延(ms)

P95时延(ms)

IoTDB 0.13

3247.19100 % 1.9711.25
不开启ID表3201.8598.60 %2.0410.97

使用Plain ID方法的IoTDB (设备名ID化为原设备名)

3285.01101.17 %2.0110.39

使用SHA256 ID方法的IoTDB (设备名ID化为SHA256值)

3239.1099.75 %2.429.97


内存占用测试

时间序列路径模板:root.test.ab01234567_1.ab0123456789.ab0123456789.ab0123456789.ab0123456789.ab0123456789.ab0123456789.ab0123456789.ab0123456789.d_1.s_1  (共270字节)

该路径来源于某公司真实场景及调研时理论计算假设:时序数据库数据文件存储结构调研


内存占用

理论占用

使用Plain ID方法的IoTDB (设备名ID化为原设备名)

160MB159MB

使用SHA256 ID方法的IoTDB (设备名ID化为SHA256值)

156MB156MB



实验结论

  1. 对于写入:时间序列路径层级越多,ID表带来的性能收益越高,在层级比较少的情况下(4层及以下),会带来性能损失。因为ID表查询一次需要进行三次哈希,MMananger需要进行路径层级次哈希,开启ID表后,需要做设备路径到设备ID的转换,具有一定额外开销
  2. 对于查询:无论是否开启ID表,查询性能基本不变。虽然查询时每一条时间序列需要进行ID化来找到对应文件,但由于查询主要是磁盘操作,ID化带来的开销基本可以忽略不计。



  • No labels