目录
前言
我们在开发中,使用传统的关系型数据库,当数据量过大时,查询会变得很慢,甚至会崩溃卡死,我们今天来测试下JDBC中调用ProcessDB数据库,查询大数据时的速度
一、历史采样接口测试
1.条件准备
我们这里选用大家都有的PUBLIC库下的SYS表的PDB_OS_CPU_USAGE数据点,数据量为822039条数据
2.测试历史采样接口代码
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class Test {
public static void main(String[] args) {
try {
Class.forName("com.processdb.jdbc.JDBC");
Connection connection = null;
Statement statement = null;
try {
// 对数据库进行连接
connection = DriverManager.getConnection("jdbc:processdb://localhost:8301//instance01", "root", "root");
statement = connection.createStatement();
// 设置超时时间
statement.setQueryTimeout(30); // set timeout to 30 sec.
ResultSet rs = null;
//测试请求一个月的采样数据的速度
String sql = "select id_f,name_f,INTERVAL_F,time_f,QUALITY_F,value_f from his_table where name_f= ? and time_f> ? and time_f< ?";
// 填充sql所需要的参数
String param1 = "public.sys.PDB_OS_CPU_USAGE";
String param2 = "2022-11-01 00:00:00";
String param3 = "2022-11-23 14:33:50";
PreparedStatement ps = connection.prepareStatement(sql);
ps.setString(1, param1);
ps.setString(2, param2);
ps.setString(3, param3);
System.out.println("======查询开始=======");
long beginTime = System.currentTimeMillis();
rs = ps.executeQuery();
long endTime = System.currentTimeMillis();
System.out.println("======查询结束=======");
System.out.println("==消耗时间=="+(endTime-beginTime)+"ms");
System.out.println("数据数量: " + rs.getRow());
} catch (SQLException e) {
System.err.println(e.getMessage());
e.printStackTrace();
} finally {
try {
if (statement != null) {
statement.close();
}
if (connection != null) {
connection.close();
}
} catch (SQLException e) {
System.err.println(e);
}
}
} catch (ClassNotFoundException e1) {
e1.printStackTrace();
return;
}
return;
}
}
3.速度测试结果
我们可以看到,822039条数据,查询出来只需要294ms
======查询开始=======
======查询结束=======
==消耗时间==294ms
数据数量: 822039
二、历史统计接口测试
1.条件准备
我们这里选用大家都有的PUBLIC库下的SYS表的PDB_OS_CPU_USAGE数据点,数据量为822039条数据
2.测试历史统计接口代码
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class Test {
public static void main(String[] args) {
try {
Class.forName("com.processdb.jdbc.JDBC");
Connection connection = null;
Statement statement = null;
try {
// 对数据库进行连接
connection = DriverManager.getConnection("jdbc:processdb://localhost:8301/instance01", "root", "root");
statement = connection.createStatement();
// 设置超时时间
statement.setQueryTimeout(30); // set timeout to 30 sec.
ResultSet rs = null;
int i = 0;
while (i < 1) {
i++;
String sql = "select * from STAT_TABLE where name_f='PUBLIC.SYS.PDB_OS_CPU_USAGE' and interval_f = 60 and time_f>'2022-11-01 00:00:00' and time_f<'2022-11-23 14:33:50'";
// 运行sql发起请求
System.out.println("======统计开始=======");
long beginTime = System.currentTimeMillis();
rs = statement.executeQuery(sql);
long endTime = System.currentTimeMillis();
System.out.println("======统计结束=======");
System.out.println("==消耗时间=="+(endTime-beginTime)+"ms");
// 查询结果存储在ResultSet
System.out.println("数据数量: " + rs.getRow());
}
} catch (SQLException e) {
System.err.println(e.getMessage());
e.printStackTrace();
} finally {
try {
if (statement != null) {
statement.close();
}
if (connection != null) {
connection.close();
}
} catch (SQLException e) {
System.err.println(e);
}
}
} catch (ClassNotFoundException e1) {
e1.printStackTrace();
return;
}
return;
}
}
3.速度测试结果
我们可以看到,统计822039条数据,60秒一个统计间隔,只需252ms
======统计开始=======
======统计结束=======
==消耗时间==252ms
数据数量: 32007