虽说不一定5分钟就插入完毕,因为取决去所插入的字段,如果字段过多会稍微慢点,但不至于太慢。10分钟内基本能看到结果。
之前我尝试用多线程来实现数据插入(百万条数据),半个多小时才二十多万条数据。
线程池数据插入核心代码:
ExecutorService executorService = Executors.newFixedThreadPool();
executorService.submit(new Runnable() {
@Override
public void run() {
for (int i = ; i < ; i++) {
TestUser user = new TestUser();
user.setName(RandomUtil.randomString());
userDao.insert(user);
System.out.println("插入数据:" + i);
}
System.out.println(Thread.currentThread().getName() + "正在执行任务");
}
});
应用场景:
造测试数据,如千万甚至亿万级别的数据自动快速生成。
关键核心实现类代码如下:
long startTime = System.currentTimeMillis();
try {
for (int i = ; i < ; i++) {
List users = new ArrayList<>();
for (int j = ; j < ; j++) {
TestUser user = new TestUser();
user.setName(RandomUtil.randomString());
user.setName2(RandomUtil.randomString());
user.setName3(RandomUtil.randomString());
user.setName4(RandomUtil.randomString());
user.setName5(RandomUtil.randomString());
user.setName6(RandomUtil.randomString());
user.setName7(RandomUtil.randomString());
user.setName8(RandomUtil.randomString());
user.setName10(RandomUtil.randomString());
user.setName11(RandomUtil.randomString());
user.setName12(RandomUtil.randomString());
user.setName13(RandomUtil.randomString());
user.setName14(RandomUtil.randomString());
user.setName15(RandomUtil.randomString());
user.setName16(RandomUtil.randomString());
user.setName17(RandomUtil.randomString());
user.setName18(RandomUtil.randomString());
user.setName19(RandomUtil.randomString());
user.setName20(RandomUtil.randomString());
users.add(user);
}
int changed = userDao.batchAdd(users);
System.out.println("#" + i + " changed=" + changed);
}
} catch (Exception ex) {
ex.printStackTrace();
} finally {
long endTime = System.currentTimeMillis();
System.out.println("Time elapsed:" + toDhmsStyle((endTime - startTime) / ) + ".");
}
代码原理:
插入一千条数据后提交一次,然后重复一万次的方式。
关键核心DAO:
@Repository
public interface TestUserDao extends BaseMapper {
int batchAdd(@Param("users") List users);
}
XML:
insert into test_user(name,name2,name3,name4,name5,name6,name7,name8,name9,name10,name11,name12,name13,name14,name15,name16,name17,name18,name19,name20)
values
(#{item.name},#{item.name2},#{item.name3},#{item.name4},#{item.name5},#{item.name6},#{item.name7},#{item.name8},#{item.name9},#{item.name10},#{item.name11},#{item.name12},#{item.name13},#{item.name14},#{item.name15},#{item.name16},#{item.name17},#{item.name18},#{item.name19},#{item.name20})
【JDBC】使用Spring提供的JDBCTemplate通过Statement向MySql数据库插入千万条数据,耗时4m55s,使用insert语句批量插入方式二
这回依然是使用 insert批量插入这种方式 insert into emp(name,age,cdate) values ('A' , 20, '2019-10-13 00:00:00'), ('B ...
【JDBC】使用Spring提供的JDBCTemplate通过PrepareStatement向MySql数据库插入千万条数据,耗时32m47s,速度提升有限
数据库环境还和原来一样,只是从Statement换成了PrepareStatement,都说PrepareStatement因为预编译比Statement快,但是实际运行真快不了多少. 代码如下: p ...
[MyBatis]五分钟向MySql数据库插入一千万条数据 批量插入 用时5分左右
本例代码下载:https://files.cnblogs.com/files/xiandedanteng/InsertMillionComparison20191012.rar 我的数据库环境是mys ...
orcle 如何快速插入百万千万条数据
有时候做实验测试数据用到大量数据时可以用以下方法插入: 方法一:使用xmltable create table bqh8 as select rownum as id from xmltable('1 ...
java向数据库插入N条数据
为了测试mysql的索引,要向数据库先插入上万条数据,然后再测试.手动插入太麻烦,写了一段代码. 先上代码: package action; import java.sql.Connection; i ...
mysql自定义函数并在存储过程中调用,生成一千万条数据
mysql 自定义函数,生成 n 个字符长度的随机字符串 -- sql function delimiter $$ create function rand_str(n int) returns VA ...
你向 Mysql 数据库插入 100w 条数据用了多久?
阅读本文大概需要 2 分钟. ▌目录 多线程插入(单表) 多线程插入(多表) 预处理 SQL 多值插入 SQL 事务( N 条提交一次) ▌多线程插入(单表) 问:为何对同一个表的插入多线程会比单线程 ...
LOAD DATA INFILE读取CSV中一千万条数据至mysql
作业要求 构建一个关系模式和课本中的关系movies(title,year,length,movietype,studioname,producerC)一样的关系,名称自定,在这个关系中插入1000万 ...
ArrayList插入1000w条数据的时间比较分析
一分钟系列: 读懂GC日志 ArrayList插入1000w条数据之后,我怀疑了jvm... Java JIT性能调优 Java性能优化指南系列(三):理解JIT编译器 准备:调试程序加入VM Opt ...
随机推荐
iOS简易图片选择器 (图片可多选,仿微信)
调用方法 NickyImagePickerViewController *pickerController = [[NickyImagePickerViewController alloc]init] ...
表结构导出到excel中
SELECT 表名 = case when a.colorder=1 then d.name else '' end, 表说明 = case when a.colorder=1 then isnull ...
HDU 1465 不容易系列之一(错排,递归)
简而言之,就是把n个信封全部装错的可能数.(中问题,具体看题目) //当n个编号元素放在n个编号位置,元素编号与位置编号各不对应的方法数用M(n)表示, //那么M(n-1)就表示n-1个编号元素放在 ...
「Poetize9」升降梯口
3056: 升降梯口 Time Limit: 2 Sec Memory Limit: 128 MBSubmit: 43 Solved: 42[Submit][Status] Description ...
NET版微信客户端.
微信客户端.NET版 目录 说明 功能 原理步骤 一些参考 说明 前两天比较闲,研究了一下web版微信.因为之前看过一篇博客讲微信web协议的,后来尝试分析了一下,半途中发现其实没什么意义,但又不想半 ...
STL 源代码分析 算法 stl_heap.h
本文senlie原版的.转载请保留此地址:http://blog.csdn.net/zhengsenlie heap ----------------------------------------- ...
Hibernate缓存和状态
缓存是介于应用程序和物理数据源之间,其作用是为了降低应用程序对物理数据源访问的频次,从而提高了应用的运行性能. 缓存的介质一般是内存,所以读写速度很快.但如果缓存中存放的数据量非常大时,也会用硬盘 ...
[ASP.NET][Session] 使用 SQLServer 会话管理解决 Session 丢失问题
使用 SQLServer 会话管理解决 Session 丢失问题 步骤 1.通过命令行执行 aspnet_regsql.exe 程序(不要双击安装),先在 CMD 中输入命令 cd C:\Window ...
Swift 之属性setter、getter方法
Swift 之属性setter.getter方法 Swift中的属性分为两种属性,一种就是计算型属性 一种就是存储型属性,开始我虽然知道这两种属性,但是了解并不深对于他的setter和getter方法 ...