詳解MySQL批量入庫(kù)的幾種方式
目錄
- 1. MySQL批量入庫(kù)概述
- 2. Hutool封裝jdbc方式
- 測(cè)試環(huán)境準(zhǔn)備
- 3. Jdbc直接或批量執(zhí)行方式
- 4. MyBatis批量入庫(kù)方式
- 5. MySQL批量入庫(kù)總結(jié)
1. MySQL批量入庫(kù)概述
最近壓測(cè)一款mysql持久化工具,目前市面上mysql批量入庫(kù)方式有很多,這里分別對(duì)常用的幾種方式進(jìn)行壓測(cè)對(duì)比分析,比如列舉了hutool工具封裝的jdbc方式,jdbc直接執(zhí)行與批量執(zhí)行的方式,以及常用的mybatis方式。
2. Hutool封裝jdbc方式
Hutool-db是一個(gè)在JDBC基礎(chǔ)上封裝的數(shù)據(jù)庫(kù)操作工具類(lèi),通過(guò)包裝,使用ActiveRecord思想操作數(shù)據(jù)庫(kù)。在Hutool-db中,使用Entity(本質(zhì)上是個(gè)Map)代替Bean來(lái)使數(shù)據(jù)庫(kù)操作更加靈活,同時(shí)提供Bean和Entity的轉(zhuǎn)換提供傳統(tǒng)ORM的兼容支持。
數(shù)據(jù)庫(kù)(Hutool-db):https://hutool.cn/docs/#/db/%E6%A6%82%E8%BF%B0
測(cè)試結(jié)論,hutool批量入庫(kù),數(shù)據(jù)量:10000,耗時(shí):7.38秒,吞吐量:1357
測(cè)試環(huán)境準(zhǔn)備
1.安裝數(shù)據(jù)庫(kù),執(zhí)行初始化腳本:batch-ddl.sql
-- ID、姓名、性別、年齡、Email、電話、住址。 DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( ? `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT "ID主鍵", ? `name` varchar(64) NOT NULL COMMENT "姓名", ? `sex` varchar(4) NOT NULL COMMENT "男,女", ? `age` int(3) NOT NULL COMMENT "年齡", ? `email` varchar(64) DEFAULT NULL COMMENT "郵箱", ? `phone` varchar(64) DEFAULT NULL COMMENT "電話", ? `address` varchar(64) DEFAULT NULL COMMENT "地址", ? `deleted` tinyint(4) NOT NULL DEFAULT "0" COMMENT "是否刪除 0 未刪除 1 刪除 默認(rèn)是0", ? `create_id` bigint(20) NOT NULL DEFAULT "0" COMMENT "創(chuàng)建人賬號(hào)id", ? `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT "創(chuàng)建時(shí)間", ? `update_id` bigint(20) NOT NULL DEFAULT "0" COMMENT "更新人賬號(hào)id", ? `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT "更新時(shí)間", ? PRIMARY KEY (`id`) USING BTREE, ? KEY `idx_name_age` (`name`,`age`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT="用戶(hù)表"; select * from user; select count(*) from user;
2.創(chuàng)建maven項(xiàng)目,引入依賴(lài):hutool-all,mysql-connector-java
? ? ? ? <dependency> ? ? ? ? ? ? <groupId>cn.hutool</groupId> ? ? ? ? ? ? <artifactId>hutool-all</artifactId> ? ? ? ? ? ? <version>5.8.10</version> ? ? ? ? </dependency> ? ? ? ? <!--mysql數(shù)據(jù)庫(kù)驅(qū)動(dòng) --> ? ? ? ? <dependency> ? ? ? ? ? ? <groupId>mysql</groupId> ? ? ? ? ? ? <artifactId>mysql-connector-java</artifactId> ? ? ? ? ? ? <version>5.1.49</version> ? ? ? ? </dependency> ? ? ? ? <!-- mybatis --> ? ? ? ? <dependency> ? ? ? ? ? ? <groupId>org.mybatis</groupId> ? ? ? ? ? ? <artifactId>mybatis</artifactId> ? ? ? ? ? ? <version>3.4.6</version> ? ? ? ? </dependency>
代碼配置實(shí)現(xiàn)
1.創(chuàng)建配置:db.setting
## db.setting文件 url = jdbc:mysql://127.0.0.1:3306/user_db?characterEncoding=utf8 user = root pass = 123456 ## 可選配置 # 是否在日志中顯示執(zhí)行的SQL showSql = false # 是否格式化顯示的SQL formatSql = false # 是否顯示SQL參數(shù) showParams = false # 打印SQL的日志等級(jí),默認(rèn)debug,可以是info、warn、error sqlLevel = error
2.代碼實(shí)現(xiàn)
HutoolBatchSave
package com.zrj.maven.assembly.demo.dbutils;
import cn.hutool.core.util.IdUtil;
import cn.hutool.db.Db;
import cn.hutool.db.Entity;
import java.sql.SQLException;
/**
?* hutool批量入庫(kù)
?* 數(shù)據(jù)量:10000,耗時(shí):7.38秒,吞吐量:1357
?*
?* @author zrj
?* @since 2022/11/25
?**/
public class HutoolBatchSave {
? ? public static void main(String[] args) {
? ? ? ? hutoolBatchSave();
? ? }
? ? /**
? ? ?* hutool批量入庫(kù)
? ? ?* 1.安裝數(shù)據(jù)庫(kù),執(zhí)行初始化腳本:batch-ddl.sql
? ? ?* 2.創(chuàng)建maven項(xiàng)目,引入依賴(lài):hutool-all,mysql-connector-java
? ? ?* 3.創(chuàng)建配置:db.setting
? ? ?* 4.測(cè)試驗(yàn)證
? ? ?*/
? ? private static void hutoolBatchSave() {
? ? ? ? int count = 10000;
? ? ? ? Db db = Db.use();
? ? ? ? long start = System.currentTimeMillis();
? ? ? ? System.out.println("Hutool批量入庫(kù)開(kāi)始:" + start);
? ? ? ? try {
? ? ? ? ? ? for (int i = 0; i < count; i++) {
? ? ? ? ? ? ? ? //生成的是不帶-的字符串,類(lèi)似于:b17f24ff026d40949c85a24f4f375d42
? ? ? ? ? ? ? ? String simpleUUID = IdUtil.simpleUUID();
? ? ? ? ? ? ? ? db.insertForGeneratedKey(Entity.create("user")
? ? ? ? ? ? ? ? ? ? ? ? .set("name", simpleUUID)
? ? ? ? ? ? ? ? ? ? ? ? .set("sex", "男")
? ? ? ? ? ? ? ? ? ? ? ? .set("age", 18)
? ? ? ? ? ? ? ? ? ? ? ? .set("email", "jerry@hello.com")
? ? ? ? ? ? ? ? ? ? ? ? .set("phone", "123456789")
? ? ? ? ? ? ? ? ? ? ? ? .set("address", "北京歡迎你"));
? ? ? ? ? ? }
? ? ? ? } catch (SQLException e) {
? ? ? ? ? ? e.printStackTrace();
? ? ? ? }
? ? ? ? long end = System.currentTimeMillis();
? ? ? ? System.out.println("Hutool批量入庫(kù)結(jié)束:" + end);
? ? ? ? System.out.println("Hutool批量入庫(kù)耗時(shí):" + (end - start));
? ? }
}
3. Jdbc直接或批量執(zhí)行方式
Jdbc提供兩種方式,一種是直接執(zhí)行,另一種是批量執(zhí)行(每1000筆提交一次事務(wù))。
Jdbc批量入庫(kù)
采用JDBC直接處理,數(shù)據(jù)量:10000,耗時(shí):7.38秒,吞吐量:1357
采用JDBC批處理,數(shù)據(jù)量:10000,耗時(shí):7.38秒,吞吐量:1357
環(huán)境依賴(lài)參考上一策略。
JdbcBatchSave
package com.zrj.maven.assembly.demo.dbutils;
import cn.hutool.core.util.IdUtil;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
/**
?* Jdbc批量入庫(kù)
?* 采用JDBC直接處理,數(shù)據(jù)量:10000,耗時(shí):6.689秒,吞吐量:1494.9
?* 采用JDBC批處理,數(shù)據(jù)量:10 0000,耗時(shí):2.271秒,吞吐量:44,033
?*
?* @author zrj
?* @since 2022/11/25
?**/
public class JdbcBatchSave {
? ? private static String url = "jdbc:mysql://localhost:3306/user_db?useServerPrepStmts=false&rewriteBatchedStatements=true&useUnicode=true&characterEncoding=UTF-8";
? ? private static String user = "root";
? ? private static String password = "123456";
? ? private static String drive = "com.mysql.jdbc.Driver";
? ? /**
? ? ?* Jdbc批量入庫(kù)
? ? ?* 1.安裝數(shù)據(jù)庫(kù),執(zhí)行初始化腳本:batch-ddl.sql
? ? ?* 2.創(chuàng)建maven項(xiàng)目,引入依賴(lài):hutool-all,mysql-connector-java
? ? ?* 3.創(chuàng)建配置:db.setting
? ? ?* 4.測(cè)試驗(yàn)證
? ? ?*/
? ? public static void main(String[] args) {
? ? ? ? //jdbcBatchSaveNoExecuteBatch();
? ? ? ? jdbcBatchSaveExecuteBatch();
? ? }
? ? /**
? ? ?* 采用JDBC批處理(開(kāi)啟事務(wù)、無(wú)事務(wù))
? ? ?* 無(wú)批量提交,數(shù)據(jù)量:10 0000,耗時(shí):2.271秒,吞吐量:44,033
? ? ?*/
? ? public static void jdbcBatchSaveExecuteBatch() {
? ? ? ? System.out.println("采用JDBC批處理(開(kāi)啟事務(wù)、無(wú)事務(wù))");
? ? ? ? //定義連接、statement對(duì)象
? ? ? ? Connection conn = null;
? ? ? ? PreparedStatement pstmt = null;
? ? ? ? try {
? ? ? ? ? ? //1. 獲取連接對(duì)象
? ? ? ? ? ? //加載jdbc驅(qū)動(dòng)
? ? ? ? ? ? Class.forName(drive);
? ? ? ? ? ? //連接mysql
? ? ? ? ? ? conn = DriverManager.getConnection(url, user, password);
? ? ? ? ? ? //將自動(dòng)提交關(guān)閉
? ? ? ? ? ? conn.setAutoCommit(true);
? ? ? ? ? ? //2. 定義sql語(yǔ)句
? ? ? ? ? ? //String sql = "insert into contract(`name`, `code`) values(?,?)";
? ? ? ? ? ? String sql = "insert into `user_db`.`user`( `name`, `sex`, `age`, `email`, `phone`, `address`, `deleted`, `create_id`, `create_time`, `update_id`, `update_time`) " +
? ? ? ? ? ? ? ? ? ? "VALUES (?, "boy", 18, "jerry@hello.com", "123456789", "beijing", 0, 0, "2022-11-25 11:17:12", 0, "2022-11-25 11:17:12")";
? ? ? ? ? ? //3. 為sql語(yǔ)句賦值
? ? ? ? ? ? pstmt = conn.prepareStatement(sql);
? ? ? ? ? ? long start = System.currentTimeMillis();
? ? ? ? ? ? System.out.println("Jdbc批量入庫(kù)開(kāi)始:" + start);
? ? ? ? ? ? //每次提交1000條,循環(huán)10次
? ? ? ? ? ? int cycle = 10;//循環(huán)次數(shù)
? ? ? ? ? ? int execute = 10000;//每次提交次數(shù)
? ? ? ? ? ? long beginNumber = 0;//起始id
? ? ? ? ? ? long endNumber = beginNumber + execute;//每次循環(huán)插入的數(shù)據(jù)量
? ? ? ? ? ? for (int i = 0; i < cycle; i++) {
? ? ? ? ? ? ? ? while (beginNumber < endNumber) {
? ? ? ? ? ? ? ? ? ? //生成的是不帶-的字符串,類(lèi)似于:b17f24ff026d40949c85a24f4f375d42
? ? ? ? ? ? ? ? ? ? String simpleUUID = IdUtil.simpleUUID();
? ? ? ? ? ? ? ? ? ? pstmt.setString(1, simpleUUID);
? ? ? ? ? ? ? ? ? ? //添加到同一個(gè)批處理中
? ? ? ? ? ? ? ? ? ? pstmt.addBatch();
? ? ? ? ? ? ? ? ? ? beginNumber++;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? //執(zhí)行批處理
? ? ? ? ? ? ? ? pstmt.executeBatch();
? ? ? ? ? ? ? ? //邊界值自增1000
? ? ? ? ? ? ? ? endNumber += execute;
? ? ? ? ? ? }
? ? ? ? ? ? long end = System.currentTimeMillis();
? ? ? ? ? ? System.out.println("Jdbc批量入庫(kù)結(jié)束:" + end);
? ? ? ? ? ? System.out.println("Jdbc批量入庫(kù)耗時(shí):" + (end - start));
? ? ? ? } catch (Exception e) {
? ? ? ? ? ? e.printStackTrace();
? ? ? ? } finally {
? ? ? ? ? ? close(pstmt, conn);
? ? ? ? }
? ? }
? ? /**
? ? ?* 采用JDBC直接處理(開(kāi)啟事務(wù)、關(guān)閉事務(wù))
? ? ?* 無(wú)批量提交,數(shù)據(jù)量:10000,耗時(shí):6.689秒,吞吐量:1494.9
? ? ?*/
? ? public static void jdbcBatchSaveNoExecuteBatch() {
? ? ? ? System.out.println("采用JDBC直接處理(開(kāi)啟事務(wù)、關(guān)閉事務(wù))");
? ? ? ? //定義連接、statement對(duì)象
? ? ? ? int count = 10000;
? ? ? ? Connection conn = null;
? ? ? ? PreparedStatement pstmt = null;
? ? ? ? try {
? ? ? ? ? ? //1. 獲取連接對(duì)象
? ? ? ? ? ? //加載jdbc驅(qū)動(dòng)
? ? ? ? ? ? Class.forName(drive);
? ? ? ? ? ? //連接mysql
? ? ? ? ? ? conn = DriverManager.getConnection(url, user, password);
? ? ? ? ? ? //將自動(dòng)提交關(guān)閉
? ? ? ? ? ? conn.setAutoCommit(true);
? ? ? ? ? ? //2. 定義sql語(yǔ)句
? ? ? ? ? ? //String sql = "insert into contract(`name`, `code`) values(?,?)";
? ? ? ? ? ? String sql = "insert into `user_db`.`user`( `name`, `sex`, `age`, `email`, `phone`, `address`, `deleted`, `create_id`, `create_time`, `update_id`, `update_time`) " +
? ? ? ? ? ? ? ? ? ? "VALUES (?, "boy", 18, "jerry@hello.com", "123456789", "beijing", 0, 0, "2022-11-25 11:17:12", 0, "2022-11-25 11:17:12")";
? ? ? ? ? ? //3. 為sql語(yǔ)句賦值
? ? ? ? ? ? pstmt = conn.prepareStatement(sql);
? ? ? ? ? ? long start = System.currentTimeMillis();
? ? ? ? ? ? System.out.println("Jdbc批量入庫(kù)開(kāi)始:" + start);
? ? ? ? ? ? for (int i = 0; i < count; i++) {
? ? ? ? ? ? ? ? //生成的是不帶-的字符串,類(lèi)似于:b17f24ff026d40949c85a24f4f375d42
? ? ? ? ? ? ? ? String simpleUUID = IdUtil.simpleUUID();
? ? ? ? ? ? ? ? pstmt.setString(1, simpleUUID);
? ? ? ? ? ? ? ? pstmt.execute();
? ? ? ? ? ? }
? ? ? ? ? ? long end = System.currentTimeMillis();
? ? ? ? ? ? System.out.println("Jdbc批量入庫(kù)結(jié)束:" + end);
? ? ? ? ? ? System.out.println("Jdbc批量入庫(kù)耗時(shí):" + (end - start));
? ? ? ? } catch (Exception e) {
? ? ? ? ? ? e.printStackTrace();
? ? ? ? } finally {
? ? ? ? ? ? close(pstmt, conn);
? ? ? ? }
? ? }
? ? private static void close(PreparedStatement pstmt, Connection conn) {
? ? ? ? if (pstmt != null || conn != null) {
? ? ? ? ? ? try {
? ? ? ? ? ? ? ? conn.close();
? ? ? ? ? ? ? ? pstmt.close();
? ? ? ? ? ? } catch (SQLException e) {
? ? ? ? ? ? ? ? e.printStackTrace();
? ? ? ? ? ? }
? ? ? ? }
? ? }
}
4. MyBatis批量入庫(kù)方式
MyBatis具有方便的擴(kuò)展性,與業(yè)務(wù)代碼解耦,動(dòng)態(tài)sql等等高擴(kuò)展特性,是目前使用非常廣泛的orm插件,一般與spring集成,ssm項(xiàng)目,但是其性能缺有些場(chǎng)景下不如jdbc,驗(yàn)證參考。
MyBatis批量入庫(kù): 數(shù)據(jù)量:10000,耗時(shí):23.951秒,吞吐量:417.5
環(huán)境依賴(lài)參考上一策略(batch-ddl.sql,引入依賴(lài):hutool-all,mybatis,mysql-connector-java)。
創(chuàng)建配置:UserMapper,mybatis-config.xml,UserMapper.xml
UserMapper
package com.zrj.maven.assembly.demo.mapper;
import org.apache.ibatis.annotations.Param;
/**
?* Descriptation
?*
?* @author zrj
?* @since 2022/11/25
?**/
public interface UserMapper {
? ? void insertUser(@Param("name") String name);
}
mybatis-config.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration ? ? ? ? PUBLIC "-//mybatis.org//DTD Config 3.0//EN" ? ? ? ? "http://mybatis.org/dtd/mybatis-3-config.dtd"> <!-- mybatis的主配置文件 --> <configuration> ? ? <!-- 配置環(huán)境 --> ? ? <environments default="mysql"> ? ? ? ? <!-- 配置mysql的環(huán)境--> ? ? ? ? <environment id="mysql"> ? ? ? ? ? ? <!-- 配置事務(wù)的類(lèi)型--> ? ? ? ? ? ? <transactionManager type="JDBC"></transactionManager> ? ? ? ? ? ? <!-- 配置數(shù)據(jù)源(連接池) --> ? ? ? ? ? ? <dataSource type="POOLED"> ? ? ? ? ? ? ? ? <!-- 配置連接數(shù)據(jù)庫(kù)的4個(gè)基本信息 --> ? ? ? ? ? ? ? ? <property name="driver" value="com.mysql.jdbc.Driver"/> ? ? ? ? ? ? ? ? <property name="url" value="jdbc:mysql://localhost:3306/user_db"/> ? ? ? ? ? ? ? ? <property name="username" value="root"/> ? ? ? ? ? ? ? ? <property name="password" value="123456"/> ? ? ? ? ? ? </dataSource> ? ? ? ? </environment> ? ? </environments> ? ? <!-- ? ? 注意:這里需要注意一下, ? ? 使用xml配置方式的時(shí)候放開(kāi)xml配置,必須注釋掉注解配置, ? ? 使用注解配置的時(shí)候放開(kāi)注解配置,注釋掉xml配置。 ? ? --> ? ? <!-- 指定映射配置文件的位置,映射配置文件指的是每個(gè)dao獨(dú)立的配置文件 --> ? ? <mappers> ? ? ? ? <mapper resource="mapper/UserMapper.xml"/> ? ? </mappers> ? ? <!-- 在使用基于注解的 Mybatis 配置時(shí),請(qǐng)移除 xml 的映射配置(IUserDao.xml) --> ? ? <!--<mappers>--> ? ? <!--<mapper></mapper>--> ? ? <!--</mappers>--> </configuration>
UserMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zrj.maven.assembly.demo.mapper.UserMapper">
? ? <insert id="insertUser">
? ? ? ? INSERT INTO `user_db`.`user`(`name`, `sex`, `age`, `email`, `phone`, `address`, `deleted`, `create_id`, `create_time`, `update_id`, `update_time`)
? ? ? ? VALUES (#{name}, "girl", 18, "jerry@hello.com", "123456789", "beijing", 0, 0, "2022-11-25 11:17:12", 0, "2022-11-25 11:17:12");
? </insert>
</mapper>
MyBatisBatchSave
package com.zrj.maven.assembly.demo.dbutils;
import cn.hutool.core.util.IdUtil;
import com.zrj.maven.assembly.demo.mapper.UserMapper;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;
/**
?* MyBatis批量入庫(kù)
?* 數(shù)據(jù)量:10000,耗時(shí):23.951秒,吞吐量:417.5
?*
?* @author zrj
?* @since 2022/11/25
?**/
public class MyBatisBatchSave {
? ? public static void main(String[] args) {
? ? ? ? myBatisBatchSave();
? ? }
? ? /**
? ? ?* MyBatis批量入庫(kù)
? ? ?* 1.安裝數(shù)據(jù)庫(kù),執(zhí)行初始化腳本:batch-ddl.sql
? ? ?* 2.創(chuàng)建maven項(xiàng)目,引入依賴(lài):hutool-all,mybatis,mysql-connector-java
? ? ?* 3.創(chuàng)建配置:UserMapper,mybatis-config.xml,UserMapper.xml
? ? ?* 4.測(cè)試驗(yàn)證
? ? ?*/
? ? private static void myBatisBatchSave() {
? ? ? ? int count = 10000;
? ? ? ? InputStream in = null;
? ? ? ? SqlSession session = null;
? ? ? ? try {
? ? ? ? ? ? // 1.讀取配置文件
? ? ? ? ? ? in = Resources.getResourceAsStream("mybatis-config.xml");
? ? ? ? ? ? // 2.創(chuàng)建SqlSessionFactory工廠
? ? ? ? ? ? SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
? ? ? ? ? ? SqlSessionFactory factory = builder.build(in);
? ? ? ? ? ? // 3.使用工廠生產(chǎn)SQLSession對(duì)象
? ? ? ? ? ? session = factory.openSession(true);
? ? ? ? ? ? // 4.使用SQLSession創(chuàng)建Dao接口的代理對(duì)象
? ? ? ? ? ? UserMapper userMapper = session.getMapper(UserMapper.class);
? ? ? ? ? ? // 5.使用代理對(duì)象執(zhí)行方法
? ? ? ? ? ? long start = System.currentTimeMillis();
? ? ? ? ? ? System.out.println("MyBatis批量入庫(kù)開(kāi)始:" + start);
? ? ? ? ? ? for (int i = 0; i < count; i++) {
? ? ? ? ? ? ? ? //生成的是不帶-的字符串,類(lèi)似于:b17f24ff026d40949c85a24f4f375d42
? ? ? ? ? ? ? ? String simpleUUID = IdUtil.simpleUUID();
? ? ? ? ? ? ? ? userMapper.insertUser(simpleUUID);
? ? ? ? ? ? }
? ? ? ? ? ? long end = System.currentTimeMillis();
? ? ? ? ? ? System.out.println("MyBatis批量入庫(kù)結(jié)束:" + end);
? ? ? ? ? ? System.out.println("MyBatis批量入庫(kù)耗時(shí):" + (end - start));
? ? ? ? } catch (IOException e) {
? ? ? ? ? ? e.printStackTrace();
? ? ? ? } finally {
? ? ? ? ? ? try {
? ? ? ? ? ? ? ? // 6.釋放資源
? ? ? ? ? ? ? ? session.close();
? ? ? ? ? ? ? ? in.close();
? ? ? ? ? ? } catch (IOException e) {
? ? ? ? ? ? ? ? e.printStackTrace();
? ? ? ? ? ? }
? ? ? ? }
? ? }
}
5. MySQL批量入庫(kù)總結(jié)
采用hutool批量入庫(kù), 數(shù)據(jù)量:10000, 耗時(shí):7.38秒, 吞吐量:1357(次之)
采用JDBC直接處理, 數(shù)據(jù)量:10000, 耗時(shí):6.689秒, 吞吐量:1494.9(其次)
采用JDBC批處理, 數(shù)據(jù)量:100000,耗時(shí):2.271秒, 吞吐量:44033(最高)
采用MyBatis批量入庫(kù): 數(shù)據(jù)量:10000, 耗時(shí):23.951秒, 吞吐量:417.5(最差)
到此這篇關(guān)于詳解MySQL批量入庫(kù)的幾種方式的文章就介紹到這了,更多相關(guān)MySQL批量入庫(kù)內(nèi)容請(qǐng)搜索以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持!
相關(guān)文章:
1. MySQL Router實(shí)現(xiàn)MySQL的讀寫(xiě)分離的方法2. mysql-bin.000001文件的來(lái)源及處理方法3. Delphi中的Access技巧集4. 常見(jiàn)數(shù)據(jù)庫(kù)系統(tǒng)之比較 - SYBASE 和 SQL SERVER5. MySQL插入數(shù)據(jù)時(shí),如果記錄不存在則insert,如果存在則update6. SQLServer導(dǎo)出數(shù)據(jù)庫(kù)字典的詳細(xì)圖文教程7. 數(shù)據(jù)庫(kù)Oracle9i的企業(yè)管理器簡(jiǎn)介8. 淺談MySQL和mariadb區(qū)別9. mysql like語(yǔ)句問(wèn)題10. 數(shù)據(jù)庫(kù)相關(guān)的幾個(gè)技能:ACCESS轉(zhuǎn)SQL

網(wǎng)公網(wǎng)安備