Java千万数据导入mysql_java之5分钟插入千万条数据
雖說不一定5分鐘就插入完畢,因?yàn)槿Q去所插入的字段,如果字段過多會(huì)稍微慢點(diǎn),但不至于太慢。10分鐘內(nèi)基本能看到結(jié)果。
之前我嘗試用多線程來實(shí)現(xiàn)數(shù)據(jù)插入(百萬條數(shù)據(jù)),半個(gè)多小時(shí)才二十多萬條數(shù)據(jù)。
線程池?cái)?shù)據(jù)插入核心代碼:
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("插入數(shù)據(jù):" + i);
}
System.out.println(Thread.currentThread().getName() + "正在執(zhí)行任務(wù)");
}
});
應(yīng)用場景:
造測試數(shù)據(jù),如千萬甚至億萬級(jí)別的數(shù)據(jù)自動(dòng)快速生成。
關(guān)鍵核心實(shí)現(xiàn)類代碼如下:
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) / ) + ".");
}
代碼原理:
插入一千條數(shù)據(jù)后提交一次,然后重復(fù)一萬次的方式。
關(guān)鍵核心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數(shù)據(jù)庫插入千萬條數(shù)據(jù),耗時(shí)4m55s,使用insert語句批量插入方式二
這回依然是使用 insert批量插入這種方式 insert into emp(name,age,cdate) values ('A'?,?20,?'2019-10-13 00:00:00'), ('B ...
【JDBC】使用Spring提供的JDBCTemplate通過PrepareStatement向MySql數(shù)據(jù)庫插入千萬條數(shù)據(jù),耗時(shí)32m47s,速度提升有限
數(shù)據(jù)庫環(huán)境還和原來一樣,只是從Statement換成了PrepareStatement,都說PrepareStatement因?yàn)轭A(yù)編譯比Statement快,但是實(shí)際運(yùn)行真快不了多少. 代碼如下: p ...
[MyBatis]五分鐘向MySql數(shù)據(jù)庫插入一千萬條數(shù)據(jù) 批量插入 用時(shí)5分左右
本例代碼下載:https://files.cnblogs.com/files/xiandedanteng/InsertMillionComparison20191012.rar 我的數(shù)據(jù)庫環(huán)境是mys ...
orcle 如何快速插入百萬千萬條數(shù)據(jù)
有時(shí)候做實(shí)驗(yàn)測試數(shù)據(jù)用到大量數(shù)據(jù)時(shí)可以用以下方法插入: 方法一:使用xmltable create table bqh8 as select rownum as id from xmltable('1 ...
java向數(shù)據(jù)庫插入N條數(shù)據(jù)
為了測試mysql的索引,要向數(shù)據(jù)庫先插入上萬條數(shù)據(jù),然后再測試.手動(dòng)插入太麻煩,寫了一段代碼. 先上代碼: package action; import java.sql.Connection; i ...
mysql自定義函數(shù)并在存儲(chǔ)過程中調(diào)用,生成一千萬條數(shù)據(jù)
mysql 自定義函數(shù),生成 n 個(gè)字符長度的隨機(jī)字符串 -- sql function delimiter $$ create function rand_str(n int) returns VA ...
你向 Mysql 數(shù)據(jù)庫插入 100w 條數(shù)據(jù)用了多久?
閱讀本文大概需要 2 分鐘. ▌目錄 多線程插入(單表) 多線程插入(多表) 預(yù)處理 SQL 多值插入 SQL 事務(wù)( N 條提交一次) ▌多線程插入(單表) 問:為何對(duì)同一個(gè)表的插入多線程會(huì)比單線程 ...
LOAD DATA INFILE讀取CSV中一千萬條數(shù)據(jù)至mysql
作業(yè)要求 構(gòu)建一個(gè)關(guān)系模式和課本中的關(guān)系movies(title,year,length,movietype,studioname,producerC)一樣的關(guān)系,名稱自定,在這個(gè)關(guān)系中插入1000萬 ...
ArrayList插入1000w條數(shù)據(jù)的時(shí)間比較分析
一分鐘系列: 讀懂GC日志 ArrayList插入1000w條數(shù)據(jù)之后,我懷疑了jvm... Java JIT性能調(diào)優(yōu) Java性能優(yōu)化指南系列(三):理解JIT編譯器 準(zhǔn)備:調(diào)試程序加入VM Opt ...
隨機(jī)推薦
iOS簡易圖片選擇器 (圖片可多選,仿微信)
調(diào)用方法 NickyImagePickerViewController *pickerController = [[NickyImagePickerViewController alloc]init] ...
表結(jié)構(gòu)導(dǎo)出到excel中
SELECT 表名 = case when a.colorder=1 then d.name else '' end, 表說明 = case when a.colorder=1 then isnull ...
HDU 1465 不容易系列之一(錯(cuò)排,遞歸)
簡而言之,就是把n個(gè)信封全部裝錯(cuò)的可能數(shù).(中問題,具體看題目) //當(dāng)n個(gè)編號(hào)元素放在n個(gè)編號(hào)位置,元素編號(hào)與位置編號(hào)各不對(duì)應(yīng)的方法數(shù)用M(n)表示, //那么M(n-1)就表示n-1個(gè)編號(hào)元素放在 ...
「Poetize9」升降梯口
3056: 升降梯口 Time Limit: 2 Sec??Memory Limit: 128 MBSubmit: 43??Solved: 42[Submit][Status] Description ...
NET版微信客戶端.
微信客戶端.NET版 目錄 說明 功能 原理步驟 一些參考 說明 前兩天比較閑,研究了一下web版微信.因?yàn)橹翱催^一篇博客講微信web協(xié)議的,后來嘗試分析了一下,半途中發(fā)現(xiàn)其實(shí)沒什么意義,但又不想半 ...
STL 源代碼分析 算法 stl_heap.h
本文senlie原版的.轉(zhuǎn)載請(qǐng)保留此地址:http://blog.csdn.net/zhengsenlie heap ----------------------------------------- ...
Hibernate緩存和狀態(tài)
緩存是介于應(yīng)用程序和物理數(shù)據(jù)源之間,其作用是為了降低應(yīng)用程序?qū)ξ锢頂?shù)據(jù)源訪問的頻次,從而提高了應(yīng)用的運(yùn)行性能. ? 緩存的介質(zhì)一般是內(nèi)存,所以讀寫速度很快.但如果緩存中存放的數(shù)據(jù)量非常大時(shí),也會(huì)用硬盤 ...
[ASP.NET][Session] 使用 SQLServer 會(huì)話管理解決 Session 丟失問題
使用 SQLServer?會(huì)話管理解決 Session 丟失問題 步驟 1.通過命令行執(zhí)行 aspnet_regsql.exe 程序(不要雙擊安裝),先在 CMD 中輸入命令 cd C:\Window ...
Swift 之屬性setter、getter方法
Swift 之屬性setter.getter方法 Swift中的屬性分為兩種屬性,一種就是計(jì)算型屬性?一種就是存儲(chǔ)型屬性,開始我雖然知道這兩種屬性,但是了解并不深對(duì)于他的setter和getter方法 ...
總結(jié)
以上是生活随笔為你收集整理的Java千万数据导入mysql_java之5分钟插入千万条数据的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《风起洛阳》和《谁是凶手》致豆瓣口碑暴跌
- 下一篇: java如何用键盘输入_java中如何从