mongodb数据库,批量插入性能测试记录
spring boot 框架下,操作mongodb數(shù)據(jù)庫(kù)
maven:spring-data-mongodb:2.1.3.RELEASE
mongo數(shù)據(jù)庫(kù)用的是本地的mongo,所以環(huán)境不一樣,可能結(jié)果不一樣。但趨勢(shì)應(yīng)該是一樣的。
測(cè)試保證每次批量插入時(shí),庫(kù)里的數(shù)據(jù)量都是一樣的,大概是50萬(wàn)左右。
每條數(shù)據(jù)大概15個(gè)字段左右,存的都是普通的數(shù)據(jù),沒(méi)有過(guò)長(zhǎng)的數(shù)據(jù)。每條數(shù)據(jù)轉(zhuǎn)換成行數(shù)據(jù),大概就是100字節(jié)左右。
除了id索引外,還有兩個(gè)字段有索引。
簡(jiǎn)易代碼如下:
//CheckedData是存入mongo對(duì)應(yīng)的實(shí)體類 List<CheckedData> checkedDataList = new ArrayList<>(); checkedDataList.add(...); long start01 = System.currentTimeMillis(); mongoTemplate.insert(checkedDataList, CheckedData.class); long start02 = System.currentTimeMillis(); log.info("每次插入時(shí)間:"+(start02-start01));我批量上傳,每批list的大小分為1條,100條,500條,1000條,2000條,5000條,10000條,15000條,30000條這些維度去試的。
結(jié)果如下:
1、批量上傳1條,其實(shí)就是單條插入,插入時(shí)間基本在1ms~5ms內(nèi)
2、批量上傳100條,插入時(shí)間基本在10ms~20ms內(nèi)
3、批量上傳500條,插入時(shí)間基本在50ms~60ms內(nèi)
4、批量上傳1000條,插入時(shí)間基本在400ms~450ms內(nèi)
5、批量上傳2000條,插入時(shí)間基本在800ms~900ms內(nèi)
6、批量上傳5000條,插入時(shí)間基本在1100ms~1200ms內(nèi)
7、批量上傳10000條,插入時(shí)間基本在1600ms~1700ms內(nèi)
8、批量上傳15000條,插入時(shí)間基本在2100ms~2300ms內(nèi)
9、批量上傳30000條,插入時(shí)間基本在3900ms~4000ms內(nèi)
根據(jù)上面的測(cè)試,如果我們需求是插入30萬(wàn)條數(shù)據(jù),那么批量插入不同的條數(shù),對(duì)應(yīng)的時(shí)間如下,我們?nèi)∩厦鏁r(shí)間區(qū)間的最大值計(jì)算:
300000數(shù)據(jù),如果每批1條,按1條1ms算,那么共花費(fèi)1*300000ms=300000ms;
如果每批100個(gè),那么需要3000批,即花費(fèi)3000*20ms=60000ms;
如果每批500個(gè),那么需要600批,即花費(fèi)600*60ms=36000ms;
如果每批1000個(gè),那么需要300批,即花費(fèi)300*450ms=135000ms;
如果每批2000個(gè),那么需要150批,即花費(fèi)150*900ms=135000ms;
如果每批5000個(gè),那么需要60批,即花費(fèi)60*1200ms=72000ms;
如果每批10000個(gè),那么需要30批,即花費(fèi)30*1700ms=51000ms;
如果每批30000個(gè),那么需要10批,即花費(fèi)10*4000ms=40000ms;
結(jié)論:
綜上,500條左右是最優(yōu)批量插入的條數(shù),
單條插入是最慢的,
超過(guò)1000條會(huì)變慢許多,
但到了30000條一批,速度又會(huì)快起來(lái),
所以如果內(nèi)存足夠大,服務(wù)器足夠好,而要插入的數(shù)據(jù)又特別多的時(shí)候,一批30000條也是可以的。
以上數(shù)據(jù)僅僅是在我的電腦上測(cè)試的,可能會(huì)有誤差,僅供參考。
總結(jié)
以上是生活随笔為你收集整理的mongodb数据库,批量插入性能测试记录的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: php培训出生做微电影网站的,微电影分享
- 下一篇: mysql 硬负载_软负载均衡和硬负载均