2010-06-26 93 views
3

我正在尋找關於內存鍵值存儲引擎或庫的建議,這些引擎或庫具有C++接口或使用C++編寫。C++內存中鍵值存儲

我正在尋找能沒有任何問題擴展到約100mill鍵值對,並且兼容/編譯Linux和Win32的解決方案/ 64

+5

你有任何重複的鍵/值或所有唯一? – 2010-06-26 04:19:00

+0

「需要擴展到大約1億個鍵值對」和「在內存中」的要求將會彼此矛盾。可以同時滿足這兩個要求,但要問的第一個問題是你是否需要滿足兩者。鍵/值真的必須在內存中嗎? – 2010-06-26 09:19:06

+1

@Chris:它可以有重複的鍵,所以它會像std :: multimap或std :: multiset – Hippicoder 2010-06-26 15:12:52

回答

3

我認爲在內存中存儲100個密鑰值對並不是一個好主意。

也許我會用像沙發-DB

3

的std ::地圖細給出的關鍵在於規模和價值小,可用內存(約1億雙)大。 如果不是這種情況,並且您希望通過鍵值對運行程序,請考慮使用標準的MapReduce API。 Map Reduce專門用於分佈式系統並處理大型數據,特別是鍵值對。 Map Reduce也有很好的C++ API。 http://en.wikipedia.org/wiki/MapReduce

1

嘗試FastDB,雖然你可能會得到超過你的要求。東京內閣似乎也支持內存數據庫。 (或者,由mmap映射的文件支持。對於現代操作系統,由於操作系統緩存使後者非常高效,因此「in-ram」數據庫與mmap之間沒有太大區別)。

5

如果你真的需要在內存中存儲這麼多的對,請考慮這個Sparse Hash。它有特殊的實現,針對低內存消耗進行了優化。

1

哈希映射(也稱爲無序地圖)是許多對最好的選擇。你可以在Boost和TR1中找到一個實現。有人質疑這個尺寸 - 如果他有一臺64位服務器,那麼就有足夠的空間容納1億個kv對。

+1

我想要一些持久性機制,可能是磁盤或網絡。 – Hippicoder 2010-06-26 15:14:07

+0

然後你需要獲得一個數據庫。 – Puppy 2010-06-26 15:22:09

+0

添加或刪除時,這可能最終導致內存碎片問題。 – NickD 2010-07-13 10:32:49

-1

Oracle Berkeley_db是您需要的。