千萬級別資料插入實現方案

2021-10-05 13:53:28 字數 2027 閱讀 4626

上次面試問我上萬級別的資料如何快速插入資料庫,當時不知怎麼回答,回來通過查資料和實踐,通過執行緒池和事務管理實現了批量快速插入資料,特地總結一下。

目錄結構,乙個簡單的springboot工程

首先建立乙個普通的表只有三個字段:

create database if not exists demo;

use demo;

create table if not exists t_user

(t_id int not null,

t_name varchar(10

) not null,

t_age int not null

)

執行緒池配置

執行緒數量:

cpu密集型(加密,計算hash等):cpu核心數1到2倍左右

耗時io型(讀寫資料庫,檔案網路讀寫)一般是cpu核心數多倍充分利用cpu

這裡主要是io型

所以核心執行緒數配置為8,最大執行緒數配置為14

配置類,將執行緒池交給springboot框架去維護

記得執行緒池中佇列數量,這裡要迴圈1000次數,索性佇列設定成2000,避免佇列過小執行緒池奔潰

服務層**,處理資料插入操作

@service

//開啟事務

@transactional

public

class

demoservice

//執行緒池任務結束立即關閉執行緒池

texecutor.

shutdown()

; system.out.

println

(texecutor.

getmaximumpoolsize()

);// 結束時間

long end =

newdate()

.gettime()

;// 耗時

system.out.

println

("1000萬條資料插入花費時間 : "

+(end - begin)

/1000);

system.out.

println

(end)

; system.out.

println

(begin);}

private

class

demorunnable

implements

runnable

//提交事務

1000萬條資料插入執行時間幾乎為0

注意點:

資料庫表的預設容量是:4m,如果插入資料量過大,超過的容量的資料會插入失敗

檢視容量show variables like 『%max_allowed_pack%』;

設定容量set global max_allowed_packet = 100乘1024乘1024並重啟;

插入後會很快顯示成功並顯示結果,但是後台資料庫會默默執行插入實際時間會比較長,所以不要急著去檢視資料庫。

PHP 千萬級別資料插入

header content type text html charset utf 8 設定 執行不受時間限制 set time limit 0 鏈結資料庫 con mysqli connect 127.0.0.1 root test if mysqli connect error 設定編碼為utf...

Mysql千萬級別資料優化方案

一 目的與意義 1 說明 在mysql單錶中資料達到千萬級別時資料的分頁查詢結果時間過長,對此進行優達到最優效果,也就是時間最短 此統計利用的jdbc連線,其中fid為該錶的主鍵 二 解決思路與根據 本測試表中資料在千萬級別 1 建立索引 優點 當表中有大量記錄時,若要對錶進行查詢,第一種搜尋資訊方...

Mysql千萬級別資料優化方案 單錶

mysql千萬級別資料優化方案 目錄 目錄 1 一 目的與意義 2 1 說明 2 二 解決思路與根據 本測試表中資料在千萬級別 2 1 建立索引 2 2 資料體現 主鍵非索引,實際測試結果 其中fid 建立索引 2 3 mysql 分頁原理 2 4 經過實際測試當對表所有列查詢時 2 三 總結 3 ...