2014-09-13 66 views
10

該場景大約有10億條記錄。每個記錄具有1kb的數據大小並存儲在SSD中。 哪個kv商店可以提供最好的隨機讀取性能?它需要將磁盤訪問減少到每個查詢只有一次,並且所有的數據索引都將被存儲在內存中。高性能持久性關鍵值存儲大量記錄

Redis速度很快,但將1 TB數據存儲在內存中的成本太高。每個查詢LevelDB讀取磁盤數次。 我發現的最接近的一個是fatcache,但它不是持久的。這是一個SSD支持的memcached。

有什麼建議嗎?

回答

8

RocksDB可能是您的選擇,它針對內存和閃存等快速存儲進行了優化,並且具有高度可定製性。如果您的應用程序在初始批量加載後是隻讀的,那麼您可以配置RocksDB以將所有內容壓縮到一個大文件中。以這種方式,讀取保證最多隻有一個I/O。但是,如果您的應用程序同時處理讀取和寫入操作,那麼爲了每次讀取最多隻有一個I/O,您需要犧牲寫入性能,因爲您需要將rocksdb配置爲經常進行壓縮,這會影響寫入性能。

RocksDB調諧指南也可以找到here

0

你看過aerospike嗎?我沒有使用它,但他們聲稱在SSD上有很好的表現。

2

您可能想試試RocksDB,這是一個針對SSD存儲優化的facebook庫。您也可以嘗試Ardb,它是在RockDB/LevelDB/LMDB上構建的兼容Redis協議的NoSQL DB。

1

LMDB比RocksDB快並且使用1/3的內存。 LMDb也不需要調整; RocksDB需要仔細調整超過40個參數才能獲得接近LMDB的性能。

http://www.lmdb.tech/bench/inmem/scaling.html

而且LMDB是完全事務和100%防撞,RocksDB兩者都不是。

+0

我比較了RocksDB和LMDB。在我的測試環境中,RocksDB獲勝。 – avhacker 2014-09-25 10:22:51

+2

我猜,當所有的數據都可以加載到內存中時,LMDB將會贏。 這裏是我的測試環境: 4GB內存虛擬機,10M記錄,每個記錄有16個字節的大小和1024字節的值。您可以看到該數據大小至少爲10GB。 我試着在測試集中多次隨機讀取數次,RocksDB總是獲勝。 – avhacker 2014-09-25 10:28:22

+0

當然,這取決於值的大小。看到這個新的磁盤基準測試報告:http://symas.com/mdb/ondisk/ – hyc 2014-11-29 23:19:34