MongoDB1.6版本與最新1.8版本性能測(cè)試——寫入篇
本文轉(zhuǎn)自淘寶數(shù)據(jù)庫技術(shù)團(tuán)隊(duì)博客。對(duì)MongoDB最新的穩(wěn)定版1.8版本和上個(gè)穩(wěn)定版本1.6版本做了寫入性能的測(cè)試對(duì)比。從測(cè)試來看,1.8版本對(duì)性能的改進(jìn)還是卓有成效的。
原文鏈接:http://goo.gl/y0OES
在MongoDB 1.6.4的使用過程中,我們發(fā)現(xiàn)當(dāng)文件系統(tǒng)cache用盡的時(shí)候MongoDB的寫入性能會(huì)有非常大的波動(dòng)。更為致命的是,偶爾還會(huì)發(fā)生持續(xù)20-30秒的寫入阻塞。雖然MongoDB的設(shè)計(jì)非常先進(jìn),但是穩(wěn)定性一直是我們頭痛的一個(gè)問題。帶著疑問我們參加了Mongo北京開發(fā)者聚會(huì),會(huì)上10gen的工程師Alvin Richards建議測(cè)試一下MongoDB 1.8,據(jù)說在寫鎖上有所改進(jìn)。
回到杭州后,我們?cè)赗edhat 6.0上重做了MongoDB 1.6.4和1.8.0-rc0的對(duì)比測(cè)試。測(cè)試的結(jié)果如下圖所示:
這兩張圖的橫坐標(biāo)是時(shí)間軸(每個(gè)點(diǎn)代表10秒鐘),縱坐標(biāo)是插入速度(代表10秒內(nèi)的平均速度)。
測(cè)試邏輯如下:
在zyy庫下建立一個(gè)名為test的collection
在test的k字段上建立索引
開啟測(cè)試程序并打點(diǎn)。該測(cè)試程序?qū)㈤_啟10個(gè)線程對(duì)test進(jìn)行并發(fā)寫入。k由uuid調(diào)用生成,長度為37字節(jié);v長度為1k。
從測(cè)試結(jié)果上看,MongoDB 1.8.0相對(duì)于1.6.4在寫入性能上有所改進(jìn)。首先,1.6.4除了預(yù)分配文件造成性能下降外,寫入性能偶爾還會(huì)長時(shí)間降到0。而1.8.0基本沒有出現(xiàn)寫入性能降到0的情況,性能的最低點(diǎn)在于預(yù)分配文件。其次,從性能的穩(wěn)定性上看,1.8.0的波動(dòng)顯然沒有1.6.4那么夸張。在InnoDB做的類似測(cè)試也會(huì)出現(xiàn)類似波動(dòng),但是性能最低點(diǎn)不會(huì)降到MongoDB那么低。
總體而言,MongoDB 1.8.0-rc從功能和性能上都有所改進(jìn)。期待release版本和新的存儲(chǔ)引擎中。
具體測(cè)試代碼見此:
http://pastie.org/1645946
|