实验环境
操作系统:Windows 10
RAM:16.0 GB
处理器:Intel(R) Core(TM) i7-8550U CPU @ 1.80GHz 1.99 GHz
实验配置
有1个device,device有100个tensor,每一个tensor有100000000条timeseries。其中,s0与每条数据timestamp相同,s1中的数据以10万条为一循环,每个循环中包含1万1...1万条10。
实验场景
数据分布
集中分布
查询结果全部在某一时间段内,连续没有间隔,如下图所示
-----****-----
均匀分布
查询结果均匀分布在一亿条timeseries中,如下图所示
--*--*--*--*--
数据选择率
选择率为查询结果的数据量占总数据量的比值。在实验中,在选择率为0%,1%,10%,50%,100%的场景下进行了测试。
查询种类
共进行三种查询:带值过滤的原始数据查询;带值过滤的聚合查询(Count和Max_Value两种),带值过滤的group by查询(Count和Max_Value两种+10-1000不同粒度)
实验结果
如上表所示,可以发现,当选择率较低时,查询执行时间有明显的提升,选择率大于50%以后与原有时间持平。
实验代码
Code Block | ||
---|---|---|
| ||
import org.apache.iotdb.jdbc.IoTDBSQLException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class JDBCQuery {
public static String[] sqls =
new String[] {
"select s0 from root.sg1.d1 where s0<0",
"select s0 from root.sg1.d1 where s0<=1000000",
"select s0 from root.sg1.d1 where s0<=1000000&s1=1",
"select s0 from root.sg1.d1 where s0<=10000000",
"select s1 from root.sg1.d1 where s1=1",
"select s0 from root.sg1.d1 where s0<=50000000",
"select s1 from root.sg1.d1 where s1<=5",
"select s0 from root.sg1.d1 where s0>0",
"select count(s0) from root.sg1.d1 where s0<0",
"select count(s0) from root.sg1.d1 where s0<=1000000",
"select count(s0) from root.sg1.d1 where s0<=1000000&s1=1",
"select count(s0) from root.sg1.d1 where s0<=10000000",
"select count(s1) from root.sg1.d1 where s1=1",
"select count(s0) from root.sg1.d1 where s0<=50000000",
"select count(s1) from root.sg1.d1 where s1<=5",
"select count(s0) from root.sg1.d1 where s0>0",
"select max_value(s0) from root.sg1.d1 where s0<0",
"select max_value(s0) from root.sg1.d1 where s0<=1000000",
"select max_value(s0) from root.sg1.d1 where s0<=1000000&s1=1",
"select max_value(s0) from root.sg1.d1 where s0<=10000000",
"select max_value(s1) from root.sg1.d1 where s1=1",
"select max_value(s0) from root.sg1.d1 where s0<=50000000",
"select max_value(s1) from root.sg1.d1 where s1<=5",
"select max_value(s0) from root.sg1.d1 where s0>0"
};
public static String[] sqls10 =
new String[] {
"select count(s0) from root.sg1.d1 where s0<0 group by ([1, 10000000), 10ms)",
"select count(s0) from root.sg1.d1 where s0<=1000000 group by ([1, 10000000), 10ms)",
"select count(s0) from root.sg1.d1 where s0<=1000000&s1=1 group by ([1, 10000000), 10ms)",
"select count(s0) from root.sg1.d1 where s0<=10000000 group by ([1, 10000000), 10ms)",
"select count(s1) from root.sg1.d1 where s1=1 group by ([1, 10000000), 10ms)",
"select count(s0) from root.sg1.d1 where s0<=50000000 group by ([1, 10000000), 10ms)",
"select count(s1) from root.sg1.d1 where s1<=5 group by ([1, 10000000), 10ms)",
"select count(s0) from root.sg1.d1 where s0>0 group by ([1, 10000000), 10ms)",
"select max_value(s0) from root.sg1.d1 where s0<0 group by ([1, 10000000), 10ms)",
"select max_value(s0) from root.sg1.d1 where s0<=1000000 group by ([1, 10000000), 10ms)",
"select max_value(s0) from root.sg1.d1 where s0<=1000000&s1=1 group by ([1, 10000000), 10ms)",
"select max_value(s0) from root.sg1.d1 where s0<=10000000 group by ([1, 10000000), 10ms)",
"select max_value(s1) from root.sg1.d1 where s1=1 group by ([1, 10000000), 10ms)",
"select max_value(s0) from root.sg1.d1 where s0<=50000000 group by ([1, 10000000), 10ms)",
"select max_value(s1) from root.sg1.d1 where s1<=5 group by ([1, 10000000), 10ms)",
"select max_value(s0) from root.sg1.d1 where s0>0 group by ([1, 10000000), 10ms)"
};
public static String[] sqls100 =
new String[] {
"select count(s0) from root.sg1.d1 where s0<0 group by ([1, 10000000), 100ms)",
"select count(s0) from root.sg1.d1 where s0<=1000000 group by ([1, 10000000), 100ms)",
"select count(s0) from root.sg1.d1 where s0<=1000000&s1=1 group by ([1, 10000000), 100ms)",
"select count(s0) from root.sg1.d1 where s0<=10000000 group by ([1, 10000000), 100ms)",
"select count(s1) from root.sg1.d1 where s1=1 group by ([1, 10000000), 100ms)",
"select count(s0) from root.sg1.d1 where s0<=50000000 group by ([1, 10000000), 100ms)",
"select count(s1) from root.sg1.d1 where s1<=5 group by ([1, 10000000), 100ms)",
"select count(s0) from root.sg1.d1 where s0>0 group by ([1, 10000000), 100ms)",
"select max_value(s0) from root.sg1.d1 where s0<0 group by ([1, 10000000), 100ms)",
"select max_value(s0) from root.sg1.d1 where s0<=1000000 group by ([1, 10000000), 100ms)",
"select max_value(s0) from root.sg1.d1 where s0<=1000000&s1=1 group by ([1, 10000000), 100ms)",
"select max_value(s0) from root.sg1.d1 where s0<=10000000 group by ([1, 10000000), 100ms)",
"select max_value(s1) from root.sg1.d1 where s1=1 group by ([1, 10000000), 100ms)",
"select max_value(s0) from root.sg1.d1 where s0<=50000000 group by ([1, 10000000), 100ms)",
"select max_value(s1) from root.sg1.d1 where s1<=5 group by ([1, 10000000), 100ms)",
"select max_value(s0) from root.sg1.d1 where s0>0 group by ([1, 10000000), 100ms)"
};
public static String[] sqls1000 =
new String[] {
"select count(s0) from root.sg1.d1 where s0<0 group by ([1, 10000000), 1000ms)",
"select count(s0) from root.sg1.d1 where s0<=1000000 group by ([1, 10000000), 1000ms)",
"select count(s0) from root.sg1.d1 where s0<=1000000&s1=1 group by ([1, 10000000), 1000ms)",
"select count(s0) from root.sg1.d1 where s0<=10000000 group by ([1, 10000000), 1000ms)",
"select count(s1) from root.sg1.d1 where s1=1 group by ([1, 10000000), 1000ms)",
"select count(s0) from root.sg1.d1 where s0<=50000000 group by ([1, 10000000), 1000ms)",
"select count(s1) from root.sg1.d1 where s1<=5 group by ([1, 10000000), 1000ms)",
"select count(s0) from root.sg1.d1 where s0>0 group by ([1, 10000000), 1000ms)",
"select max_value(s0) from root.sg1.d1 where s0<0 group by ([1, 10000000), 1000ms)",
"select max_value(s0) from root.sg1.d1 where s0<=1000000 group by ([1, 10000000), 1000ms)",
"select max_value(s0) from root.sg1.d1 where s0<=1000000&s1=1 group by ([1, 10000000), 1000ms)",
"select max_value(s0) from root.sg1.d1 where s0<=10000000 group by ([1, 10000000), 1000ms)",
"select max_value(s1) from root.sg1.d1 where s1=1 group by ([1, 10000000), 1000ms)",
"select max_value(s0) from root.sg1.d1 where s0<=50000000 group by ([1, 10000000), 1000ms)",
"select max_value(s1) from root.sg1.d1 where s1<=5 group by ([1, 10000000), 1000ms)",
"select max_value(s0) from root.sg1.d1 where s0>0 group by ([1, 10000000), 1000ms)"
};
public static void main(String[] args) throws ClassNotFoundException, SQLException {
Class.forName("org.apache.iotdb.jdbc.IoTDBDriver");
try (Connection connection =
DriverManager.getConnection("jdbc:iotdb://127.0.0.1:6667/", "root", "root");
Statement statement = connection.createStatement()) {
// set JDBC fetchSize
statement.setFetchSize(10000);
String sql = sqls1000[0];
System.out.println(sql);
long startTime=System.currentTimeMillis();
ResultSet resultSet = statement.executeQuery(sql);
outputResult(resultSet);
long endTime=System.currentTimeMillis();
System.out.println("time: "+(endTime-startTime)+"ms");
} catch (IoTDBSQLException e) {
System.out.println(e.getMessage());
}
}
private static void outputResult(ResultSet resultSet) throws SQLException {
if (resultSet != null) {
System.out.println("--------------------------");
System.out.println();
while (resultSet.next()) {
}
}
System.out.println("--------------------------\n");
}
}
|