mysql压测快速造亿级数据

本文对比了Mybatis轻量级框架插入、JDBC直接处理(开启和关闭事务)以及JDBC批处理(开启和无事务)在大数据量插入MySQL时的效率。结果显示,JDBC批处理在开启事务的情况下速度最快,Mybatis的表现相对较慢,开启事务后性能有所提升。实验中,开启事务的JDBC批处理平均每2.5秒插入十万条数据,而Mybatis插入一万条数据耗时约28.6秒。

造大量数据的方式有很多,比如写存储过程,或者直接用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);
             pstm.setString(2, "pyh");
### 如何在 MySQL 中生成 5000 万条数据 #### 使用存储过程批量插入 创建一个复杂的存储过程可以有效地处理大规模数据插入操作。这种方法允许通过循环结构来重复执行插入命令,从而实现高效的大规模数据写入。 ```sql DELIMITER // CREATE PROCEDURE insert_large_dataset(IN record_count INT) BEGIN DECLARE counter INT DEFAULT 0; WHILE counter < record_count DO INSERT INTO large_table (column1, column2, ...) VALUES (FLOOR(1 + RAND() * 99), FLOOR(1 + RAND() * 99)); SET counter = counter + 1; IF MOD(counter, 1000) = 0 THEN COMMIT; END IF; END WHILE; END// DELIMITER ; ``` 调用此存储过程时指定要插入的记录数量即可完成大批量数据加载工作[^4]。 #### 利用编程语言自动生成 SQL 文件 另一种方法是借助外部编程环境如 Python 来构建大量的 `INSERT` 语句,并将其保存成文件形式供后续导入使用。这种方式能够灵活控制每批次提交大小以及随机化字段值等内容特性。 ```python import random with open('bulk_insert.sql', 'w') as f: for _ in range(50_000_000): value1 = random.randint(1, 100) value2 = ''.join([random.choice('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ') for n in range(8)]) line = "INSERT INTO table_name (col_int, col_str) VALUES ({}, '{}');\n".format(value1, value2) f.write(line) print("Generated bulk insert script.") ``` 之后可以通过命令行工具或者其他客户端软件读取该 `.sql` 脚本并执行其中包含的操作以达到快速填充表的目的[^3]。 #### 应用专用工具进行自动化部署 对于更高别的需求,则可考虑采用专门设计用于数据或仿真场景下的应用程序和服务。例如,Percona Toolkit 提供了一系列实用程序可以帮助管理员轻松管理 MySQL 数据库实例;而像 Data Generator 这样的第三方插件也可以方便地配置各种模式和分布规律以便更好地满足特定业务逻辑的要求[^2]。
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值