GBase9s jdbc实现了标准的批量插入接口,与其他数据库厂商使用方式一致,降低了使用成本。再次基础上还新增了一个url参数用于提升批量插入性能,通过开启该参数在网络友好的情况下通过降低交互次数提升性能。首先介绍参数如下:
IFX_USEPUT=1:开启性能优化,提升插入性能
IFX_USEPUT=0:默认值,不开启优化。
下面结合测试用例讲解批量插入的标准方式。
1、用例如下:
public static void main(String[] args) throws Exception {
String url = “jdbc:gbasedbt-sqli://localhost:19088/zhtest:GBASEDBTSERVER=gbase01;DB_LOCALE=zh_CN.utf8;CLIENT_LOCALE=zh_CN.utf8;IFX_USEPUT=1;” +
“PROTOCOLTRACE=5;PROTOCOLTRACEFILE=./trace.log”
;
String username = “gbasedbt”;
String password = “GBase123”;
Class.forName(“com.gbasedbt.jdbc.Driver”);
Connection conn = DriverManager.getConnection(url,username,password);
select(conn);
conn.close();
}
private static void select(Connection conn) throws SQLException {
conn.createStatement().execute(“truncate table test1”);
PreparedStatement pst = conn.prepareStatement("insert into test1 (col1,col2) values(?,?)");
System.out.println("begin");
long a = System.currentTimeMillis();
for(int i=0;i<10;i++){
for(int j=0;j<10000;j++){
pst.setInt(1,j);
pst.setString(2,"test");
pst.addBatch();
}
pst.executeBatch();
pst.clearBatch();
}
long b = System.currentTimeMillis();
System.out.println((b-a)/1000);
System.out.println("end");
pst.close();
}
2、执行结果如下:
3、总结
本人测试用数据库是虚拟机搭建,硬件资源水平比较差。针对IFX_USEPUT开启情况下多次运行,10万条数据插入时间稳定在20s左右。同时本人尝试将IFX_USEPUT设置为0,测试查看运行结果及其缓慢,等了几分钟并没结束,从后台查看数据库的量发现每秒仅有几条数据插入,针对IFX_USEPUT=0的测试结果就不贴在此了。故建议做批量插入时将该参数设置为1.