如果你堅持從您的數據庫的內容到一個哈希結構,以防止DB內容加速搜索我想你可能採取了錯誤的做法。我不知道你想要做什麼,但也許使用像Lucene這樣的索引是合適的?這是一個成熟且高度優化的索引,它將處理諸如在內存中緩存頻繁查詢等內容。
或者看看BerkeleyDB這基本上是一個磁盤備份哈希數據庫。也非常快。 (雖然我注意到,相信甲骨文現在可能需要一些許可證來支持這些用例)。
Lucene和BerkeleyDB唯一需要注意的是它們需要一些開銷來設置。所以我最後的建議是Tokyo-Cabinet這是一個相當不錯,非常快速,非常簡單的使用磁盤支持散列。基本上只包括在你的班級路徑中的jar,並使用它像一個HashMap:
import tokyocabinet.HDB;
....
String dir = "/path/to/my/dir/";
HDB hash = new HDB();
// open the hash for read/write, create if does not exist on disk
if (!hash.open(dir + "unigrams.tch", HDB.OWRITER | HDB.OCREAT)) {
throw new IOException("Unable to open " + dir + "unigrams.tch: " + hash.errmsg());
}
// Add something to the hash
hash.put("blah", "my string");
// Close it
hash.close();
就是這樣。您在散列中的任何內容都會持久保存到磁盤,並且可以稍後重新加載。不要擔心速度,內幕優化會在幕後爲您處理。
編輯:它看起來像東京內閣已被Kyoto Cabinet取代。
編輯2:你不會說你正在使用什麼數據庫,但是如果MySQL確實full text search不適合你?
這可能是相關的:http://stackoverflow.com/questions/3832622/java-large-persistent-hash-structure – 2011-03-17 11:58:51