JAVA向Mysql插入亿级别数据---测评

利用JAVA向Mysql插入一亿数量级数据—效率测评

      前景:这几天研究mysql优化中查询效率时,发现测试的数据太少(10万级别),利用 EXPLAIN 比较不同的 SQL 语句,不能够得到比较有效的测评数据,大多模棱两可,不敢通过这些数据下定论。

      所以通过随机生成人的姓名、年龄、性别、电话、email、地址 ,向mysql数据库大量插入数据,便于用大量的数据测试 SQL 语句优化效率。、在生成过程中发现使用不同的方法,效率天差万别。

提示:

下文展示代码为部分代码,源码-github地址
转载请标明出处:-----by 陶浩伟


1. 先上Mysql数据库,随机生成的人员数据图。分别是ID、姓名、性别、年龄、Email、电话、住址。下图一共三千三百万数据:


模拟数据

**
在数据量在亿级别时。别点下面按钮,会导致Navicat持续加载这亿级别的数据,

导致电脑死机。~觉着自己电脑配置不错的可以去试试,可能会有惊喜

**

禁止点击


2、本次测评一共通过三种策略,五种情况,进行大批量数据插入测试

	策略分别是:
	1、Mybatis 轻量级框架插入(无事务)
	2、采用JDBC直接处理(开启事务、无事务)
	3、采用JDBC批处理(开启事务、无事务)

####***先展示测试结果:***(耗费时间)

    Mybatis轻量级插入 -》 JDBC直接处理 -》 JDBC 批处理。

####JDBC 批处理,效率最高


下面开始第一种策略测试:


####2.1 Mybatis 轻量级框架插入(无事务)
Mybatis是一个轻量级框架,它比hibernate轻便、效率高。但是处理大批

量的数据插入操作时,需要过程中实现一个ORM的转换,本次测试存在实例,以及

未开启事务,导致mybatis效率很一般。这里实验内容是:

	1、利用Spring框架生成mapper实例、创建人物实例对象

	2、循环更改该实例对象属性、并插入。
//代码内无事务

	private long begin = 33112001;//起始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 = "0203";
    
    
@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赋值
            person.setId(i);
            person.s
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值