easyexcel導(dǎo)入導(dǎo)出百萬(wàn)條數(shù)據(jù)思路分析 導(dǎo)入萬(wàn)條數(shù)據(jù) 一條數(shù)據(jù)200個(gè)字 一個(gè)文字2字節(jié)byte 一條數(shù)據(jù)相當(dāng)于400byte 大約等于0.5kb 一萬(wàn)條數(shù)據(jù)大概5000kb 相當(dāng)于5M 導(dǎo)入模塊的jvm內(nèi)存設(shè)置為8G 導(dǎo)入
easyexcel導(dǎo)入導(dǎo)出百萬(wàn)條數(shù)據(jù)思路分析
導(dǎo)入萬(wàn)條數(shù)據(jù)
一條數(shù)據(jù)200個(gè)字 一個(gè)文字2字節(jié)byte 一條數(shù)據(jù)相當(dāng)于400byte 大約等于0.5kb
一萬(wàn)條數(shù)據(jù)大概5000kb 相當(dāng)于5M
導(dǎo)入模塊的jvm內(nèi)存設(shè)置為8G
- 導(dǎo)入進(jìn)行限制,系統(tǒng)只支持同時(shí)有200個(gè)人同時(shí)進(jìn)行導(dǎo)入操作,通過(guò)redis進(jìn)行記錄,操作結(jié)束后對(duì)redis中值進(jìn)行減1,同時(shí)對(duì)當(dāng)前在線導(dǎo)入的數(shù)據(jù)量進(jìn)行限制,只允許同時(shí)導(dǎo)入 100萬(wàn)條數(shù)據(jù),通過(guò)redis記錄,新建一條導(dǎo)入數(shù)據(jù)保存到數(shù)據(jù)庫(kù),同時(shí)發(fā)送一條mq消息給websocket,例如導(dǎo)入任務(wù)開始,此時(shí)消息會(huì)展示在界面上
- 通過(guò)導(dǎo)入傳遞的參數(shù)然后通過(guò)反射的方式去找到校驗(yàn)類和保存類
- 讀取數(shù)據(jù)通過(guò)線程池進(jìn)行多線程操作校驗(yàn),校驗(yàn)時(shí)記錄錯(cuò)誤數(shù)據(jù),如果出現(xiàn)失敗存在一個(gè)list中,跳出保存,走上傳錯(cuò)誤文件邏輯,將錯(cuò)誤原因記錄在文件中
- 校驗(yàn)成功后在一個(gè)事務(wù)中分批次保存數(shù)據(jù) 單次保存500條,保存后將已保存的數(shù)據(jù)clear,方便垃圾回收,保存出現(xiàn)錯(cuò)誤后回滾事務(wù)
- 如果出現(xiàn)需要遠(yuǎn)程調(diào)用feign的情況 增加seata 做控制
- 簡(jiǎn)單保存則直接在excel中引入需要保存的service與mapper
導(dǎo)出百萬(wàn)條數(shù)據(jù)
機(jī)器為16核 按照io操作
- 導(dǎo)出通過(guò)線程池控制,導(dǎo)出任務(wù)都放在線程池中運(yùn)行,核心線程數(shù)設(shè)置為16,最大線程數(shù)設(shè)置為25,隊(duì)列大小設(shè)置為30,導(dǎo)出時(shí)先判斷隊(duì)列是否已經(jīng)滿了,滿了則直接提示錯(cuò)誤,沒(méi)滿則新建一條導(dǎo)出數(shù)據(jù)保存到數(shù)據(jù)庫(kù),同時(shí)發(fā)送一條mq消息給websocket,例如導(dǎo)出任務(wù)開始,此時(shí)消息會(huì)展示在界面上
- 通過(guò)導(dǎo)出傳遞的參數(shù)反射獲取查詢的類,然后通過(guò)循環(huán)分頁(yè)去查詢結(jié)果,默認(rèn)每次查詢100條,可以自定義查詢條數(shù),將查詢進(jìn)度實(shí)時(shí)展示在界面上
- 每次查詢后將結(jié)果寫入excel中
聲明:所有內(nèi)容來(lái)自互聯(lián)網(wǎng)搜索結(jié)果,不保證100%準(zhǔn)確性,僅供參考。如若本站內(nèi)容侵犯了原著者的合法權(quán)益,可聯(lián)系我們進(jìn)行處理。