引言:這幾天工作這邊同事遇到了乙個問題,對十五萬條資料進行計算,插入資料庫的時候耗時很嚴重,使用了批量插入對十五萬條資料插入仍然耗費了30秒,前面計算也耗費了二十多秒,系統流暢度因此很難堪。經過我的排查發現主要是兩個點需要優化。
1)計算的演算法冗餘,優化前23秒計算完成,優化後0.8秒完成計算(由於業務特殊、保密不方便透露)
2)十五萬條資料批量插入資料庫時耗費了30秒,優化後3秒。(已達到業務要求範圍內,所以不再繼續其他細節優化)
批量插入基於的是mybatisplus 的service的insertbatch方法
優化思路:
使用執行緒池+任務分派器將15萬條資料平均分派給執行緒池中16個執行緒去處理
儲存所有資料的集合為list
執行緒池使用的fixedthreadpool,因為機器是四核8執行緒,所以我執行緒池裡放的16個執行緒。
1、建立執行緒池
executorservice es = executors.newfixedthreadpool(16);
2、任務分派器
其實就是乙個函式,負責分派要插入的資料集合,遍歷0到(執行緒數-1),然後將集合中所有資料平均分配到每乙個執行緒(資料數量%執行緒數=餘數,餘下的幾個資料的插入工作直接分配給最後乙個執行緒去)
經過分配後每個執行緒負責1萬條資料的插入
16個執行緒同時跑,由原來的30秒跑完,變成了3秒鐘。
SQL SERVER 快速插入千萬條資料
1.正常插入 插入非常慢。declare count int 10000000,index int 0 begin tran while index count begin insert into ordertest id values round rand 10000000,0 set index...
如何利用jdbc快速插入百萬條資料
當須要向資料庫插入百萬條資料時,利用hibernate,mybatis等持久層框架時耗時較久,此時使用jdbc插入效率會更高。此種場景特別適用於讀取檔案匯入到資料庫。可以利用批處理來加快jdbc的插入效率。string sql insert into person id,name values co...
資料庫 一次插入幾萬條資料
最近做了乙個功能,操作的資料量特別大,一次往資料庫 插入上萬條資料。我用了 迴圈新增,和ef封裝的新增功能。兩次方式速度都非常慢,一萬條資料要幾分鐘。在網上 查詢資料後,可以建立乙個datatable物件,然後把資料都賦值給這個datatable物件的列。然後copy到資料庫就行了。下面這段 是 例...