You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 19 Next »

目标

写一个负载程序使得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

times1s2...s10
111...1
222...2
...............
100000100000100000100000100000

步骤二:原始数据部分查询

单设备单传感器

随机在[1,100000 * (Loop + 1)]中选择1个时间点N,查询[N-999, N]数据。如果N选择在[1,1000],那么就查[1,1000]的数据。随机选择一个组一个设备,再随机选择2个传感器。总共两次查询。每次查询时间范围都不一样。

例如设备d1

select s1 from root.sg1.d1 where time >= 100 and time <= 1099
select s100 from root.sg1.d1 where time >= 1201 and time <= 2200
多设备单传感器

随机在[1,100000 * (Loop + 1)]中选择1个时间点N,查询[N-999, N]数据。如果N选择在[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,100000 * (Loop + 1)]中选择1个时间点N,查询[N-999, N]数据。如果N选择在[1,1000],那么就查[1,1000]的数据。随机选择一个组一个设备,传感器全选。总共一次查询。每次查询时间范围都不一样。

例如

select s1, s1, ...,s10 from root.sg1.d1 where time >= 100 and time <= 1099

步骤三:聚合查询

单设备单传感器

随机在[1,100000 * (Loop + 1)]中选择1个时间点N,查询[N-999, N]数据。如果N选择在[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,100000 * (Loop + 1)]中选择1个时间点N,查询[N-999, N]数据。如果N选择在[1,1000],那么就查[1,1000]的数据。步长为100。随机选择一个组一个设备,再随机选择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

times1s2...s10
100001100001100001...100001
100002100002100002...100002
...............
200000200000200000200000200000

重复上述操作

2. 乱序写入查询

步骤一:执行1. 普通写入查询

步骤二:执行flush操作

步骤三:写入乱序点

随机选择一个sensor,随机在[1,100000 * (Loop + 1)]中选择1个时间点N,插入[N-999, N]的乱序数据并且乱序数据全部加一。

例如设备d1

times1s2...s100
990019900299002...99002
990029900399003...99003
...............
100000100001100001100001100001

步骤四:查询

随机在[N-999,N]选择一个点K,查询[K-999,K]。其余全部和1. 普通写入查询同理。

步骤五:重复写入查询

重复上述操作。

3. 删除写入查询

步骤一:执行1. 普通写入查询

步骤二:删除点

随机选择一个sensor,随机在[1,100000 * (Loop + 1)]中选择1个时间点N,删除[N-999, N]的数据。

步骤三:原始数据部分查询

随机在[N-999,N]选择一个点K,查询[K-999,K]。其余全部和1. 普通写入查询同理。

4. 验证正确性

顺序数据插入数据与时间一致,且为INT64类型。乱序数据插入数据与时间+1一致。如果出现不一致的数据,将不一致的数据和sql打印到日志里。

  • No labels