EasyExcel,輕松導(dǎo)出 100W 數(shù)據(jù),不卡死,好用到爆!

一、簡(jiǎn)介 ? ? ? ? ?
在實(shí)際工作中,一般都會(huì)涉及到導(dǎo)入導(dǎo)出的功能設(shè)計(jì),本身實(shí)現(xiàn)不難,但是大數(shù)據(jù)量導(dǎo)出的時(shí)候,主要會(huì)面臨兩個(gè)問(wèn)題:
1、導(dǎo)出的速度
2、內(nèi)存占用過(guò)高導(dǎo)致的OOM的問(wèn)題
? ? ? ?之前自己封裝了一個(gè)導(dǎo)出的模塊,經(jīng)過(guò)逐步改進(jìn),性能還可以,但是新手接手使用不太方便。無(wú)意間查詢(xún)到阿里開(kāi)源的EasyExcel框架,發(fā)現(xiàn)可以將解析的EXCEL的內(nèi)存占用控制在KB級(jí)別,并且絕對(duì)不會(huì)內(nèi)存溢出,還有就是速度極快,大概100W條記錄,十幾個(gè)字段,只需要65秒即可完成下載。
二、使用案例
2.1、pom依賴(lài)
2.2、POJO對(duì)象
2.3、測(cè)試環(huán)境
2.3.1、少量數(shù)據(jù)測(cè)試
數(shù)據(jù)量 < 20W, 一個(gè)SHEET一次查詢(xún)導(dǎo)出
2.3.2、數(shù)據(jù)量適中(100W以?xún)?nèi)):一個(gè)SHEET分批查詢(xún)導(dǎo)出
2.3.3.數(shù)據(jù)量很大(幾百萬(wàn)都行):多個(gè)SHEET分批查詢(xún)導(dǎo)出
三、總結(jié)
? ? ? ?1、通過(guò)模擬的100W條記錄,18個(gè)字段,測(cè)試導(dǎo)出是70s。在實(shí)際上產(chǎn)環(huán)境使用的時(shí)候,具體的還是要看自己寫(xiě)的sql的性能。sql性能快的話(huà),會(huì)很快。
? ? ? ?2、查詢(xún)數(shù)據(jù)庫(kù)的時(shí)候,原則是:減少查詢(xún)sql,會(huì)有效地提高速率。
? ? ? ?3、可優(yōu)化地地方
? ? ??? 使用pagehelper的時(shí)候,數(shù)據(jù)量大的時(shí)候,limit 0,20W, limit 20W,40W, limit 40W,60W, limit 60W,80W?隨著下標(biāo)增大,查詢(xún)速率也會(huì)變慢,這一點(diǎn)需要認(rèn)真優(yōu)化SQL,比如根據(jù)ID來(lái)確定范圍。