目标
写一个负载程序使得IoTDB能在长期写入,覆盖层级合并、顺序乱序合并,实际删除数据,重启下,数据能够正确查询。
运行命令
java -jar XXX.jar -username root...
可配置项
组数,设备数,每个设备sensor数量,循环重复插入查询次数,写入模式(顺序,乱序,删除)。
数据规模案例
例如,10组,每组10个设备,每个设备10个sensor (sg1~sg10, d1~d10, s1~s10
)。
1. 普通写入查询
例如,10组X10设备X10个sensor=1000个sensor写入。单客户端写入。写入之后立即查询。
步骤一:写入
每个sensor写入十万个数据点
例如设备d1
time | s1 | s2 | ... | s10 |
---|---|---|---|---|
1 | 1 | 1 | ... | 1 |
2 | 2 | 2 | ... | 2 |
... | ... | ... | ... | ... |
100000 | 100000 | 100000 | 100000 | 100000 |
步骤二:原始数据部分查询
单设备单传感器
随机选择1个时间范围(随机选择一个时间点,时间点前查1000个,如果选择了[1,1000]时间点,就查[1,1000]的数据)。随机选择一个组一个设备,再随机选择2个传感器。总共两次查询。每次查询时间范围都不一样。
例如设备d1
select s1 from root.sg1.d1 where time >= 99 and time <= 1099
select s100 from root.sg1.d1 where time >= 1200 and time <= 2200
多设备单传感器
随机选择1个时间范围(随机选择一个时间点,时间点前查1000个,如果选择了[1,1000]时间点,就查[1,1000]的数据)。随机选择一个组,随机选择2个传感器。总共两次查询。每次查询时间范围都不一样。
例如
select s1 from root.sg1.d1, root.sg1.d2, ..., root.sg1.d10 where time >= 100 and time <= 1099
select s4 from root.sg1.d1, root.sg1.d2, ..., root.sg1.d10 where time >= 1201 and time <= 2200
单设备多传感器
随机选择1个时间范围(随机选择一个时间点,时间点前查1000个,如果选择了最后[1,1000]时间点,就查[1,1000]的数据)。随机选择一个组一个设备。总共一次查询。每次查询时间范围都不一样。
例如
select s1, s1, ...,s10 from root.sg1.d1 where time >= 100 and time <= 1099
步骤三:聚合查询
单设备单传感器
随机选择1个时间范围(随机选择一个时间点,往前查1000个,如果选择了[1,1000]时间点,就查[1,1000]的数据)。随机选择一个组一个设备,再随机选择2个传感器。总共四次查询。每次查询时间范围都不一样。聚合函数分别为last_value,count
。
select count(s1) from root.sg1.d1 where time >= 1001 and time <= 2000
select last_value(s1) from root.sg1.d1 where time >= 3001 and time <= 4000
select count(s100) from root.sg1.d1 where time >= 4001 and time <= 5000
select last_value(s100) from root.sg1.d1 where time >= 5001 and time <= 6000
多设备单传感器
和原始数据同理
单设备多传感器
和原始数据同理
步骤四:降采样查询
单设备单传感器
例如设备d1
随机选择1个时间范围(随机选择一个时间点,往前查1000个,如果选择了最后[1,1000]时间点,就查[1,1000]的数据)。步长为10。随机选择一个组一个设备,再随机选择2个传感器。总共六次查询。每次查询时间范围都不一样。聚合函数分别为last_value, first_value, count
。
select first_value(s1) from root.sg1.d1 group by ((1000, 2000], 10)
select last_value(s1) from root.sg1.d1 group by ((3000, 4000], 10)
select count(s1) from root.sg1.d1 group by ((4000, 5000], 10)
select first_value(s100) from root.sg1.d1 group by ((5000, 6000], 10)
select last_value(s100) from root.sg1.d1 group by ((7000, 8000], 10)
select count(s100) from root.sg1.d1 group by ((9000, 10000], 10)
多设备单传感器
和原始数据同理
单设备多传感器
和原始数据同理
重复写入查询
每个sensor再写入十万个数据点
例如设备d1
time | s1 | s2 | ... | s10 |
---|---|---|---|---|
100001 | 100001 | 100001 | ... | 100001 |
100002 | 100002 | 100002 | ... | 100002 |
... | ... | ... | ... | ... |
200000 | 200000 | 200000 | 200000 | 200000 |
重复上述操作
2. 乱序写入查询
步骤一:执行1. 普通写入查询
步骤二:执行flush操作
步骤三:写入乱序点
每个sensor随机插入N*100(1 <= N <= 9)个乱序数据点,数据全部加一。
例如设备d1
time | s1 | s2 | ... | s100 |
---|---|---|---|---|
50001 | 50002 | 50002 | ... | 50002 |
50002 | 50003 | 50003 | ... | 50003 |
... | ... | ... | ... | ... |
100000 | 100001 | 100001 | 100001 | 100001 |
步骤四:查询
随机选择1个时间范围(随机在sensor选择一个乱序数据插入时间点,时间点前后各查1000个)。其余全部和1. 普通写入查询同理。
步骤五:重复写入查询
重复上述操作。
3. 删除写入查询
步骤一:执行1. 普通写入查询
步骤二:删除点
每个sensor随机删除N*100(1 <= N <= 9)个时间点数据。
步骤三:原始数据部分查询
随机选择1个时间范围(随机在删除时间段选择一个时间点,时间点前后各查1000个)。其余全部和1. 普通写入查询同理。
4. 验证正确性
顺序数据插入数据与时间一致,且为INT64类型。乱序数据插入数据与时间+1一致。如果出现不一致的数据,将不一致的数据和sql打印到日志里。