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

2.對上面寫入的1億條數據進行讀取,讀取策略采用帕累托分布(帕累托分布即大部分數據請求是對小部分數據集的,這更接近到真實應用場景)

3.同時對上面數據進行讀寫操作,讀寫比為90:10

4.單純的寫入操作,同樣采用帕累托分布,且分布更嚴重,也就是操作針對的數據集更小

當然,上面的測試場景僅供參考,具體的性能差別最好還是根據自己的應用場景來做測試。
來源:blog.basho.com