日期:2014-05-16  浏览次数:20403 次

JDBC批量Insert深度优化(没事务)(转)
最近在做一个数据同步分发工具,高并发,高效率,异步非实时是主要特点。
为此,选择的方案是JDBC、只有两种操作,插入和更新。
?
对于更新,只能逐条分批就可以了,优化空间不大。
对于插入,则可以做批量的优化,优化的策略只能是具体问题具体分析,以测试结论为主要依据了。
?
环境:
MySQL 5.1
RedHat Linux AS 5
JavaSE 1.5
DbConnectionBroker 微型数据库连接池
?
测试的方案:
执行10万次Insert语句,使用不同方式。
?
A组:静态SQL,自动提交,没事务控制(MyISAM引擎)
1、逐条执行10万次
2、分批执行将10万分成m批,每批n条,分多种分批方案来执行。
?
B组:预编译模式SQL,自动提交,没事务控制(MyISAM引擎)
1、逐条执行10万次
2、分批执行将10万分成m批,每批n条,分多种分批方案来执行。
-------------------------------------------------------
C组:静态SQL,不自动提交,有事务控制(InnoDB引擎)
1、逐条执行10万次
2、分批执行将10万分成m批,每批n条,分多种分批方案来执行。
?
D组:预编译模式SQL,不自动提交,有事务控制(InnoDB引擎)
1、逐条执行10万次
2、分批执行将10万分成m批,每批n条,分多种分批方案来执行。
?
本次主要测试A、B组,并得出测试结果。
?
SQL代码
DROP TABLE IF EXISTS tuser;

CREATE TABLE tuser (
????id bigint(20) NOT NULL AUTO_INCREMENT,
????name varchar(12) DEFAULT NULL,
????remark varchar(24) DEFAULT NULL,
????createtime datetime DEFAULT NULL,
????updatetime datetime DEFAULT NULL,
????PRIMARY KEY (id)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
?
?
下面是A、B组的测试代码:
package testbatch;

import java.io.IOException;
import java.sql.*;

/**
* JDBC批量Insert优化(上)
*
* @author leizhimin 2009-7-29 10:03:10
*/

public class TestBatch {
????????public static DbConnectionBroker myBroker = null;

????????static {
????????????????try {
????????????????????????myBroker = new DbConnectionBroker("com.mysql.jdbc.Driver",
????????????????????????????????????????"jdbc:mysql://192.168.104.163:3306/testdb",
????????????????????????????????????????"vcom", "vcom", 2, 4,
????????????????????????????????????????"c:\\testdb.log", 0.01);
????????????????}