精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

SpringBoot利用ThreadPoolTaskExecutor批量插入百萬(wàn)級(jí)數(shù)據(jù)實(shí)測(cè)!

jf_ro2CN3Fa ? 來(lái)源:CSDN ? 作者:CSDN ? 2022-11-16 10:38 ? 次閱讀


前言

  • 開(kāi)發(fā)目的: 提高百萬(wàn)級(jí)數(shù)據(jù)插入效率。
  • 采取方案: 利用ThreadPoolTaskExecutor多線程批量插入。
  • 采用技術(shù): springboot2.1.1+mybatisPlus3.0.6+swagger2.5.0+Lombok1.18.4+postgresql+ThreadPoolTaskExecutor等。

基于 Spring Boot + MyBatis Plus + Vue & Element 實(shí)現(xiàn)的后臺(tái)管理系統(tǒng) + 用戶小程序,支持 RBAC 動(dòng)態(tài)權(quán)限、多租戶、數(shù)據(jù)權(quán)限、工作流、三方登錄、支付、短信、商城等功能

  • 項(xiàng)目地址:https://gitee.com/zhijiantianya/ruoyi-vue-pro
  • 視頻教程:https://doc.iocoder.cn/video/

具體實(shí)現(xiàn)細(xì)節(jié)

application-dev.properties添加線程池配置信息

> 基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 實(shí)現(xiàn)的后臺(tái)管理系統(tǒng) + 用戶小程序,支持 RBAC 動(dòng)態(tài)權(quán)限、多租戶、數(shù)據(jù)權(quán)限、工作流、三方登錄、支付、短信、商城等功能
>
> * 項(xiàng)目地址:
> * 視頻教程

# 異步線程配置
# 配置核心線程數(shù)
async.executor.thread.core_pool_size = 30
# 配置最大線程數(shù)
async.executor.thread.max_pool_size = 30
# 配置隊(duì)列大小
async.executor.thread.queue_capacity = 99988
# 配置線程池中的線程的名稱前綴
async.executor.thread.name.prefix = async-importDB-

spring容器注入線程池bean對(duì)象

@Configuration

@EnableAsync

@Slf4j

publicclassExecutorConfig{
@Value("${async.executor.thread.core_pool_size}")
privateintcorePoolSize;
@Value("${async.executor.thread.max_pool_size}")
privateintmaxPoolSize;
@Value("${async.executor.thread.queue_capacity}")
privateintqueueCapacity;
@Value("${async.executor.thread.name.prefix}")
privateStringnamePrefix;

@Bean(name="asyncServiceExecutor")
publicExecutorasyncServiceExecutor(){
log.warn("startasyncServiceExecutor");
//在這里修改
ThreadPoolTaskExecutorexecutor=newVisiableThreadPoolTaskExecutor();
//配置核心線程數(shù)
executor.setCorePoolSize(corePoolSize);
//配置最大線程數(shù)
executor.setMaxPoolSize(maxPoolSize);
//配置隊(duì)列大小
executor.setQueueCapacity(queueCapacity);
//配置線程池中的線程的名稱前綴
executor.setThreadNamePrefix(namePrefix);
// rejection-policy:當(dāng)pool已經(jīng)達(dá)到max size的時(shí)候,如何處理新任務(wù)
// CALLER_RUNS:不在新線程中執(zhí)行任務(wù),而是有調(diào)用者所在的線程來(lái)執(zhí)行
executor.setRejectedExecutionHandler(newThreadPoolExecutor.CallerRunsPolicy());
//執(zhí)行初始化
executor.initialize();
returnexecutor;
}
}

創(chuàng)建異步線程 業(yè)務(wù)類

@Service
@Slf4j
publicclassAsyncServiceImplimplementsAsyncService{
@Override
@Async("asyncServiceExecutor")
publicvoidexecuteAsync(ListlogOutputResults,LogOutputResultMapperlogOutputResultMapper,CountDownLatchcountDownLatch){
try{
log.warn("startexecuteAsync");
//異步線程要做的事情
logOutputResultMapper.addLogOutputResultBatch(logOutputResults);
log.warn("endexecuteAsync");
}finally{
countDownLatch.countDown();//很關(guān)鍵,無(wú)論上面程序是否異常必須執(zhí)行countDown,否則await無(wú)法釋放
}
}
}

創(chuàng)建多線程批量插入具體業(yè)務(wù)方法

@Override
publicinttestMultiThread(){
ListlogOutputResults=getTestData();
//測(cè)試每100條數(shù)據(jù)插入開(kāi)一個(gè)線程
List>lists=ConvertHandler.splitList(logOutputResults,100);
CountDownLatchcountDownLatch=newCountDownLatch(lists.size());
for(ListlistSub:lists){
asyncService.executeAsync(listSub,logOutputResultMapper,countDownLatch);
}
try{
countDownLatch.await();//保證之前的所有的線程都執(zhí)行完成,才會(huì)走下面的;
//這樣就可以在下面拿到所有線程執(zhí)行完的集合結(jié)果
}catch(Exceptione){
log.error("阻塞異常:"+e.getMessage());
}
returnlogOutputResults.size();
}

模擬2000003 條數(shù)據(jù)進(jìn)行測(cè)試

4fc16cce-6555-11ed-8abf-dac502259ad0.png

多線程 測(cè)試 2000003 耗時(shí)如下:耗時(shí)1.67分鐘

4fe0a918-6555-11ed-8abf-dac502259ad0.png4fe8a71c-6555-11ed-8abf-dac502259ad0.png

本次開(kāi)啟30個(gè)線程,截圖如下:

5003382a-6555-11ed-8abf-dac502259ad0.png

單線程測(cè)試2000003 耗時(shí)如下:耗時(shí)5.75分鐘

502a55e0-6555-11ed-8abf-dac502259ad0.png504a0548-6555-11ed-8abf-dac502259ad0.png

檢查多線程入庫(kù)的數(shù)據(jù),檢查是否存在重復(fù)入庫(kù)的問(wèn)題:

根據(jù)id分組,查看是否有id重復(fù)的數(shù)據(jù),通過(guò)sql語(yǔ)句檢查,沒(méi)有發(fā)現(xiàn)重復(fù)入庫(kù)的問(wèn)題

506e5010-6555-11ed-8abf-dac502259ad0.png

檢查數(shù)據(jù)完整性:通過(guò)sql語(yǔ)句查詢,多線程錄入數(shù)據(jù)完整

50798f48-6555-11ed-8abf-dac502259ad0.png

測(cè)試結(jié)果

不同線程數(shù)測(cè)試:

508bc816-6555-11ed-8abf-dac502259ad0.png50969b9c-6555-11ed-8abf-dac502259ad0.png

總結(jié)

通過(guò)以上測(cè)試案列,同樣是導(dǎo)入2000003 條數(shù)據(jù),多線程耗時(shí)1.67分鐘,單線程耗時(shí)5.75分鐘。通過(guò)對(duì)不同線程數(shù)的測(cè)試,發(fā)現(xiàn)不是線程數(shù)越多越好,具體多少合適,網(wǎng)上有一個(gè)不成文的算法

CPU核心數(shù)量*2 +2 個(gè)線程。

附:測(cè)試電腦配置

50c32c2a-6555-11ed-8abf-dac502259ad0.png

審核編輯 :李倩


聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • SQL
    SQL
    +關(guān)注

    關(guān)注

    1

    文章

    760

    瀏覽量

    44081
  • 多線程
    +關(guān)注

    關(guān)注

    0

    文章

    277

    瀏覽量

    19923
  • spring
    +關(guān)注

    關(guān)注

    0

    文章

    338

    瀏覽量

    14312
  • SpringBoot
    +關(guān)注

    關(guān)注

    0

    文章

    173

    瀏覽量

    169

原文標(biāo)題:性能爆表:SpringBoot利用ThreadPoolTaskExecutor批量插入百萬(wàn)級(jí)數(shù)據(jù)實(shí)測(cè)!

文章出處:【微信號(hào):芋道源碼,微信公眾號(hào):芋道源碼】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    企業(yè)級(jí)數(shù)據(jù)庫(kù)的配置和管理要求匯總

    企業(yè)級(jí)數(shù)據(jù)庫(kù)配置需高性能硬件支撐,包括服務(wù)器、存儲(chǔ)、網(wǎng)絡(luò)及電源冗余,選用穩(wěn)定DBMS與操作系統(tǒng),注重索引與查詢優(yōu)化。管理上,強(qiáng)調(diào)數(shù)據(jù)安全,實(shí)施加密、訪問(wèn)控制與審計(jì);確保高可用,配置容錯(cuò)機(jī)制與備份恢復(fù);監(jiān)控調(diào)優(yōu)性能,規(guī)劃容量與擴(kuò)展性;追求易用性,簡(jiǎn)化日常管理與維護(hù),確保
    的頭像 發(fā)表于 09-27 10:50 ?171次閱讀

    DNA計(jì)算機(jī)研究取得突破性進(jìn)展:PB級(jí)數(shù)據(jù)存儲(chǔ)與高效處理

    8月29日,科學(xué)界傳來(lái)振奮人心的消息,一項(xiàng)革命性的研究成果為實(shí)現(xiàn)全功能DNA計(jì)算機(jī)奠定了堅(jiān)實(shí)基礎(chǔ)。研究團(tuán)隊(duì)成功開(kāi)發(fā)出一種創(chuàng)新技術(shù),該技術(shù)不僅能在DNA中存儲(chǔ)驚人的PB級(jí)數(shù)據(jù),還能確保這些數(shù)據(jù)在數(shù)千乃至數(shù)百萬(wàn)年內(nèi)保持完好,同時(shí)實(shí)現(xiàn)
    的頭像 發(fā)表于 08-29 16:29 ?460次閱讀

    天拓四方:工業(yè)級(jí)數(shù)據(jù)采集網(wǎng)關(guān)核心功能解析與應(yīng)用價(jià)值

    在數(shù)字化轉(zhuǎn)型浪潮中,工業(yè)4.0與智能制造的概念日益深入人心,而這一切的基石在于高效、準(zhǔn)確的數(shù)據(jù)采集與處理能力。工業(yè)級(jí)數(shù)據(jù)采集網(wǎng)關(guān)作為連接現(xiàn)場(chǎng)設(shè)備與云端或數(shù)據(jù)中心的關(guān)鍵橋梁,扮演著至關(guān)重要的角色。本文
    的頭像 發(fā)表于 07-23 16:11 ?308次閱讀

    LPS完成戰(zhàn)略性收購(gòu) 增強(qiáng)數(shù)據(jù)實(shí)踐和營(yíng)銷云能力

    對(duì)Explora和Eleven Digital的戰(zhàn)略性收購(gòu),以增強(qiáng)其數(shù)據(jù)實(shí)踐和營(yíng)銷云能力。此次收購(gòu)將加強(qiáng)LPS技術(shù)創(chuàng)新及賦能聯(lián)想AI卓越中心(Center of Excellence)所必需的數(shù)據(jù)基礎(chǔ),加速企業(yè)AI
    的頭像 發(fā)表于 06-05 11:55 ?288次閱讀
    LPS完成戰(zhàn)略性收購(gòu) 增強(qiáng)<b class='flag-5'>數(shù)據(jù)實(shí)</b>踐和營(yíng)銷云能力

    fanuc robot interface V3.0批量讀寫(xiě)數(shù)據(jù)寄存器問(wèn)題

    labview只能讀寫(xiě)機(jī)器人單個(gè)R數(shù)據(jù)寄存器,不能批量讀取,其他讀寫(xiě)IO和坐標(biāo)都沒(méi)問(wèn)題。 調(diào)用的方法只能使用getValue和setvalue讀寫(xiě)單個(gè),不能批量一次性讀寫(xiě)數(shù)組
    發(fā)表于 06-04 15:43

    濾波器插入損耗怎么測(cè)試?測(cè)試標(biāo)準(zhǔn)是什么?

    插入損耗是指信號(hào)通過(guò)濾波器后,輸出信號(hào)與輸入信號(hào)之間的功率差距。插入損耗包括共模插入損耗和差模插入損耗兩種。插入損耗越小,說(shuō)明濾波器對(duì)輸入信
    的頭像 發(fā)表于 05-13 18:37 ?1515次閱讀
    濾波器<b class='flag-5'>插入</b>損耗怎么測(cè)試?測(cè)試標(biāo)準(zhǔn)是什么?

    車規(guī)級(jí)數(shù)字功放一體成型電感VSAD0660-3R3M數(shù)據(jù)手冊(cè)

    電子發(fā)燒友網(wǎng)站提供《車規(guī)級(jí)數(shù)字功放一體成型電感VSAD0660-3R3M數(shù)據(jù)手冊(cè).pdf》資料免費(fèi)下載
    發(fā)表于 03-04 11:38 ?0次下載

    工業(yè)級(jí)數(shù)據(jù)采集通用網(wǎng)關(guān)在車間數(shù)據(jù)采集的應(yīng)用-天拓四方分享

    數(shù)據(jù)采集網(wǎng)關(guān)是至關(guān)重要的。 工業(yè)級(jí)數(shù)據(jù)采集通用網(wǎng)關(guān)具備數(shù)據(jù)采集、處理、傳輸功能的設(shè)備,可連接多種工業(yè)現(xiàn)場(chǎng)設(shè)備,如PLC、傳感器、執(zhí)行器等,實(shí)現(xiàn)數(shù)據(jù)的實(shí)時(shí)采集、傳輸。其核心功能包括
    的頭像 發(fā)表于 01-30 16:15 ?363次閱讀

    labview 隊(duì)列最前端插入的應(yīng)用

    起到很多作用。本文將詳細(xì)介紹LabVIEW隊(duì)列的應(yīng)用,特別是在最前端插入數(shù)據(jù)的情況下。 首先,讓我們了解LabVIEW隊(duì)列的基本概念。隊(duì)列是一種數(shù)據(jù)結(jié)構(gòu),允許在一端插入元素,并在另一端
    的頭像 發(fā)表于 01-08 11:45 ?1151次閱讀

    插入損耗是什么?回波損耗是什么?影響插入損耗和回波損耗的因素

    插入損耗是什么?回波損耗是什么?影響插入損耗和回波損耗的因素 如何優(yōu)化光纖連接器損耗? 插入損耗是指信號(hào)在光纖連接器中傳輸過(guò)程中的信號(hào)衰減。而回波損耗是指在光纖連接器兩端之間的反射損耗
    的頭像 發(fā)表于 12-27 15:17 ?2349次閱讀

    輕量級(jí)數(shù)據(jù)庫(kù)有哪些類型

    輕量級(jí)數(shù)據(jù)庫(kù)是指具有小巧、靈活、高效的特點(diǎn),適用于小規(guī)模項(xiàng)目和嵌入式設(shè)備的數(shù)據(jù)庫(kù)管理系統(tǒng)。下面是對(duì)輕量級(jí)數(shù)據(jù)庫(kù)類型的詳細(xì)介紹,包括關(guān)系型數(shù)據(jù)庫(kù)、非關(guān)系型
    的頭像 發(fā)表于 12-20 11:29 ?1200次閱讀

    線路板生產(chǎn)該選大批量還是小批量

    線路板生產(chǎn)該選大批量還是小批量
    的頭像 發(fā)表于 12-13 17:22 ?901次閱讀

    什么是插入式無(wú)線傳感器?作用是什么?

    什么是插入式無(wú)線傳感器?作用是什么? 插入式無(wú)線傳感器是一種用于監(jiān)測(cè)和收集數(shù)據(jù)的設(shè)備,通常被安裝在物體表面或者結(jié)構(gòu)中。這些傳感器可以感知和測(cè)量各種物理和環(huán)境參數(shù),如溫度、濕度、壓力、聲音、光線等等
    的頭像 發(fā)表于 12-12 15:04 ?615次閱讀

    SpringBoot實(shí)現(xiàn)動(dòng)態(tài)切換數(shù)據(jù)

    最近在做業(yè)務(wù)需求時(shí),需要從不同的數(shù)據(jù)庫(kù)中獲取數(shù)據(jù)然后寫(xiě)入到當(dāng)前數(shù)據(jù)庫(kù)中,因此涉及到切換數(shù)據(jù)源問(wèn)題。本來(lái)想著使用Mybatis-plus中提供的動(dòng)態(tài)數(shù)
    的頭像 發(fā)表于 12-08 10:53 ?986次閱讀
    <b class='flag-5'>SpringBoot</b>實(shí)現(xiàn)動(dòng)態(tài)切換<b class='flag-5'>數(shù)據(jù)</b>源

    根據(jù)數(shù)據(jù)手冊(cè)配置AD9826的寄存器,示波器實(shí)測(cè)SDATA引腳輸出異常的原因?

    根據(jù)數(shù)據(jù)手冊(cè)配置AD9826的寄存器,設(shè)定工作模式為1-SHA 仿真波形如下 示波器實(shí)測(cè)SDATA引腳輸出 但是輸出結(jié)果異常 為隨機(jī)值
    發(fā)表于 12-04 08:01