造大量数据的方式有很多,比如写存储过程,或者直接用java,我现在使用的就是通过java实现大数据量的导入。
使用java也有很多方式,单条插入就不讨论了
下面主要讨论以下几种策略:
1、Mybatis 轻量级框架插入(无事务)
2、采用JDBC直接处理(开启事务、无事务)
3、采用JDBC批处理(开启事务、无事务)
先给出结论,效率比较:
Mybatis轻量级插入 > JDBC直接处理 > JDBC 批量处理。
即JDBC 批处理,效率最高
Mybatis 轻量级框架插入
Mybatis是一个轻量级框架,它比hibernate轻便、效率高。但是处理大批
量的数据插入操作时,需要过程中实现一个ORM的转换,本次测试存在实例,以及
未开启事务,导致mybatis效率很一般。这里实验内容是:
1、利用Spring框架生成mapper实例、创建人物实例对象
2、循环更改该实例对象属性、并插入。
public class batchInsert {
//代码内无事务
private long begin = 1;//起始id
private long end = begin+100000;//每次循环插入的数据量
private String url = "jdbc:mysql://localhost:3306/bigdata?useServerPrepStmts=false&rewriteBatchedStatements=true&useUnicode=true&characterEncoding=UTF-8";
private String user = "root";
private String password = "pwd";
@org.junit.Test
public void insertBigData2()
{
//加载Spring,以及得到PersonMapper实例对象。这里创建的时间并不对最后结果产生很大的影响
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
PersonMapper pMapper = (PersonMapper) context.getBean("personMapper");
//创建一个人实例
Person person = new Person();
//计开始时间
long bTime = System.currentTimeMillis();
//开始循环,循环次数500W次。
for(int i=0;i<5000000;i++)
{
//为person赋值
pstm.setLong(1, begin);