虽说不一定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 ...

&lbrack;MyBatis&rsqb;五分钟向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简易图片选择器 &lpar;图片可多选&comma;仿微信&rpar;

调用方法 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 不容易系列之一&lpar;错排,递归&rpar;

简而言之,就是把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版微信客户端&period;

微信客户端.NET版 目录 说明 功能 原理步骤 一些参考 说明 前两天比较闲,研究了一下web版微信.因为之前看过一篇博客讲微信web协议的,后来尝试分析了一下,半途中发现其实没什么意义,但又不想半 ...

STL 源代码分析 算法 stl&lowbar;heap&period;h

本文senlie原版的.转载请保留此地址:http://blog.csdn.net/zhengsenlie heap ----------------------------------------- ...

Hibernate缓存和状态

缓存是介于应用程序和物理数据源之间,其作用是为了降低应用程序对物理数据源访问的频次,从而提高了应用的运行性能.   缓存的介质一般是内存,所以读写速度很快.但如果缓存中存放的数据量非常大时,也会用硬盘 ...

&lbrack;ASP&period;NET&rsqb;&lbrack;Session&rsqb; 使用 SQLServer 会话管理解决 Session 丢失问题

使用 SQLServer 会话管理解决 Session 丢失问题 步骤 1.通过命令行执行 aspnet_regsql.exe 程序(不要双击安装),先在 CMD 中输入命令 cd C:\Window ...

Swift 之属性setter、getter方法

Swift 之属性setter.getter方法 Swift中的属性分为两种属性,一种就是计算型属性 一种就是存储型属性,开始我虽然知道这两种属性,但是了解并不深对于他的setter和getter方法 ...

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐