Riak默認(rèn)采用的是Bitcask的數(shù)據(jù)引擎,Bitcask能夠提供高效,高可用的,防崩潰的數(shù)據(jù)存儲(chǔ)。但是它有一個(gè)弱點(diǎn),就是其內(nèi)存消耗與存儲(chǔ)的數(shù)據(jù)數(shù)量成正比(盡管比例系數(shù)比較小)。也就是說(shuō)如果你使用Bitcask引擎來(lái)存儲(chǔ)大量小體積的數(shù)據(jù),可能會(huì)比較浪費(fèi)空間。
而Riak實(shí)時(shí)了同時(shí)提供了Innostore作為InnoDB引擎的封裝,以提供對(duì)大量小體積數(shù)據(jù)的存儲(chǔ),但由于InnoDB引擎固有的一些特點(diǎn),使得其有一些問(wèn)題,比如相對(duì)Bitcask來(lái)說(shuō),備份InnoDB會(huì)比較困難,還有協(xié)議上的問(wèn)題等等。
在Google發(fā)布了其Key-Value存儲(chǔ)LevelDB后,引起了Riak的注意,他們發(fā)現(xiàn)LevelDB好像正好能夠彌補(bǔ)Bitcask和InnoDB在大量小體積數(shù)據(jù)存儲(chǔ)中的缺點(diǎn),于是他們做了如下幾個(gè)InnoDB和LevelDB的性能測(cè)試。
機(jī)器配置都是普通的低配機(jī):
a fairly basic 2-CPU Linux server with 4G of RAM, mid-range SATA disks
1.以自增的數(shù)字為key順序的寫入1億條數(shù)據(jù)

2.對(duì)上面寫入的1億條數(shù)據(jù)進(jìn)行讀取,讀取策略采用帕累托分布(帕累托分布即大部分?jǐn)?shù)據(jù)請(qǐng)求是對(duì)小部分?jǐn)?shù)據(jù)集的,這更接近到真實(shí)應(yīng)用場(chǎng)景)

3.同時(shí)對(duì)上面數(shù)據(jù)進(jìn)行讀寫操作,讀寫比為90:10

4.單純的寫入操作,同樣采用帕累托分布,且分布更嚴(yán)重,也就是操作針對(duì)的數(shù)據(jù)集更小

當(dāng)然,上面的測(cè)試場(chǎng)景僅供參考,具體的性能差別最好還是根據(jù)自己的應(yīng)用場(chǎng)景來(lái)做測(cè)試。
來(lái)源:blog.basho.com