我正在使用自定義Map的項目<字符串,條目>(其中Entry是一對ints)實現基於B-tree存儲從10到100數百萬條記錄,這個類的代碼很慢並且很髒。我需要高效地實現Map,它使用文件來存儲和少量內存。基於現有文件的java.util.Map的實現
我搜索了一下,發現Berkeley DB的Java版有java.util.Collection API(包括Map),但是爲了這個目的使用一個完全成熟的數據庫似乎是多餘的(它使用的目錄有很多文件,線程管理)。有一個更簡單的解決方案嗎?
我正在使用自定義Map的項目<字符串,條目>(其中Entry是一對ints)實現基於B-tree存儲從10到100數百萬條記錄,這個類的代碼很慢並且很髒。我需要高效地實現Map,它使用文件來存儲和少量內存。基於現有文件的java.util.Map的實現
我搜索了一下,發現Berkeley DB的Java版有java.util.Collection API(包括Map),但是爲了這個目的使用一個完全成熟的數據庫似乎是多餘的(它使用的目錄有很多文件,線程管理)。有一個更簡單的解決方案嗎?
看看Kyoto Cabininet,一個磁盤備份的DBM實現。我使用了以前的版本,Tokyo Cabinet - 它很容易使用,基本上就像本地Map
一樣,而且速度非常快。
JDBM是一個輕量級的純Java B-Tree實現。
我最近有這個問題,看着太陽下的一切,包括NoSQL和緩存。你想要一個基於磁盤/文件/支持的hashmap。
伯克利DB Java版是迄今爲止最好的。它速度快,可擴展且完整,但無法分發源代碼或從Oracle購買商業版本,因此無法將其分發給客戶端。
唯一的另一種選擇,除了重新發明輪子外,還有JDBM2。它也有一個hashmap和一個樹形圖。您有責任定期刷新磁盤以防止出現OutOfMemoryError,並且它的速度不如Berkeley DB快,但它是非常好的第二選擇。
這很好,但沒有提供java.util.Map接口(我有很多假設Map接口的代碼)。 – Ivan 2011-04-26 14:03:59
創建京都櫥櫃數據庫對象的自定義'Map'包裝應該需要幾分鐘的時間。 – 2011-04-26 14:17:54