Если вы вставляете содержимое из вашей БД в хеш-структуру, чтобы ускорить поиск по содержимому БД, я думаю, что вы, вероятно, используете неправильный подход. Я не знаю, что именно вы пытаетесь сделать, но, возможно, уместно использовать индекс типа Lucene ? Это зрелый и высоко оптимизированный индекс, который будет обрабатывать такие вещи, как кэширование частых запросов в памяти.
В качестве альтернативы взгляните на BerkeleyDB , который в основном является хеш-базой данных на основе диска. Также очень быстро. (Хотя обратите внимание, я считаю, что Oracle может требовать лицензию для этого в некоторых случаях).
Единственное предостережение для 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();
И это все. Все, что вы вставите в хеш, сохраняется на диске и может быть перезагружено позже. И не беспокойтесь о скорости, оптимизация в памяти выполняется за кулисами.
Редактировать: Похоже, кабинет Токио был заменен Кабинет Киото .
Редактировать 2: Вы не говорите, какую БД вы используете, но если MySQL полнотекстовый поиск у вас не работает?