目录
前言
我们在开发中,使用传统的关系型数据库,当数据量过大时,查询会变得很慢,甚至会崩溃卡死,我们今天来测试下JAVA_API中调用ProcessDB数据库,查询大数据时的速度
一、历史采样接口测试
1.条件准备
我们这里选用大家都有的PUBLIC库下的SYS表的PDB_OS_CPU_USAGE数据点,数据量为852932条数据
2.测试历史采样接口代码
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Vector;
import com.processdb.connection.DBConnect;
import com.processdb.connection.DBConnectManager;
import com.processdb.connection.DBPoint;
import com.processdb.connection.DBRoot;
import com.processdb.connection.DBTable;
import com.processdb.connection.DBase;
import com.processdb.driver.common.ConnectInfo;
import com.processdb.driver.common.ConstantValue;
import com.processdb.driver.dao.DBHistoryDataDao;
import com.processdb.driver.record.HistoryRecordSet;
import com.processdb.driver.record.PointHistory;
public class Test {
public static void main(String[] args) throws Exception {
ConnectInfo host = new ConnectInfo();
host.setConnectName("instance01");
host.setHostName("127.0.0.1");
host.setHostPort(8301);
host.setUserName("root");
host.setPassword("root");
host.setCacheable(false);
DBConnect myConn = null;
myConn = DBConnectManager.getInstance().getConnect(host);
DBRoot root = DBRoot.getInstance(myConn);
String dbname ="PUBLIC";
DBase dBase = root.getCachedDatabaseByName(dbname);
String tableName ="SYS";
DBTable dbtable = dBase.getCachedTableByName(tableName);
String pointName = "PDB_OS_CPU_USAGE";
DBPoint dbpoint = dbtable.getCachedPointByName(pointName);
/*
* 条件准备
*/
SimpleDateFormat dateFmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date begindate = null; // 开始时间
Date enddate = null; // 结束时间
begindate = dateFmt.parse("2022-11-01 00:00:00");
enddate = dateFmt.parse("2022-11-24 14:00:00");
int interval = 0; // 时间间隔
byte query_type = ConstantValue.HIS_VALUE_SAMPLE; // 采样点
// 查询历史的参数列表
Vector<PointHistory> pointHistoryList = new Vector<PointHistory>();
// 给查询历史的参数列表赋值
PointHistory ph = new PointHistory(dbpoint, begindate, enddate,
interval, query_type);
pointHistoryList.add(ph);
// 查询历史数据
System.out.println("======查询开始=======");
long beginTime = System.currentTimeMillis();
DBHistoryDataDao.requestPointHistoryByName(myConn, pointHistoryList);
long endTime = System.currentTimeMillis();
System.out.println("======查询结束=======");
PointHistory result = pointHistoryList.get(0);
HistoryRecordSet record = result.getSampleRecordSet(); // 采样点的历史数据
int count = record.getRecordNum();
System.out.println("==消耗时间=="+(endTime-beginTime)+"ms");
System.out.println("数据数量: " + count);
myConn.close();
}
}
3.速度测试结果
我们可以看到,852932条数据,查询出来只需要300ms
======查询开始=======
======查询结束=======
==消耗时间==300ms
数据数量: 852932
二、历史统计接口测试
1.条件准备
我们这里选用大家都有的PUBLIC库下的SYS表的PDB_OS_CPU_USAGE数据点,数据量为852932条数据
2.测试历史统计接口代码
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Vector;
import com.processdb.connection.DBConnect;
import com.processdb.connection.DBConnectManager;
import com.processdb.connection.DBPoint;
import com.processdb.connection.DBRoot;
import com.processdb.connection.DBTable;
import com.processdb.connection.DBase;
import com.processdb.driver.common.ConnectInfo;
import com.processdb.driver.common.ConstantValue;
import com.processdb.driver.dao.DBHistoryDataDao;
import com.processdb.driver.record.HistoryRecordSet;
import com.processdb.driver.record.PointHistory;
import com.processdb.driver.record.StatsRecord;
public class Test {
public static void main(String[] args) throws Exception {
ConnectInfo host = new ConnectInfo();
host.setConnectName("instance01");
host.setHostName("127.0.0.1");
host.setHostPort(8301);
host.setUserName("root");
host.setPassword("root");
host.setCacheable(false);
DBConnect myConn = null;
myConn = DBConnectManager.getInstance().getConnect(host);
DBRoot root = DBRoot.getInstance(myConn);
String dbname ="PUBLIC";
DBase dBase = root.getCachedDatabaseByName(dbname);
String tableName ="SYS";
DBTable dbtable = dBase.getCachedTableByName(tableName);
String pointName = "PDB_OS_CPU_USAGE";
DBPoint dbpoint = dbtable.getCachedPointByName(pointName);
/*
* 条件准备
*/
SimpleDateFormat dateFmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date begindate = null; // 开始时间
Date enddate = null; // 结束时间
begindate = dateFmt.parse("2022-11-01 00:00:00");
enddate = dateFmt.parse("2022-11-24 14:00:00");
int interval = 60; // 时间间隔
byte query_type = ConstantValue.HIS_VALUE_STAT; // 采样点
// 查询历史参数列表
Vector<PointHistory> pointHistoryList = new Vector<PointHistory>();
// 给查询历史的参数列表赋值
PointHistory ph = new PointHistory(dbpoint, begindate, enddate,
interval, query_type);
pointHistoryList.add(ph);
// 查询历史统计数据
System.out.println("======查询开始=======");
long beginTime = System.currentTimeMillis();
DBHistoryDataDao.requestPointHistoryByName(myConn, pointHistoryList);
long endTime = System.currentTimeMillis();
System.out.println("======查询结束=======");
PointHistory result = pointHistoryList.get(0);
Vector<StatsRecord> statsRecords = result.getStatsRecords();// 统计数据查询结果
int count = statsRecords.size();
System.out.println("==消耗时间=="+(endTime-beginTime)+"ms");
System.out.println("数据数量: " + count);
myConn.close();
}
}
3.速度测试结果
我们可以看到,统计852932条数据,60秒一个统计间隔,只需258ms
======查询开始=======
======查询结束=======
==消耗时间==258ms
数据数量: 33414