Работа с большими объёмами данных java

Сейчас мне необходимо хранить в словаре(HashMap) неограниченное кол-во строк вида "key=value". Это занимает огромное кол-во памяти и я хотел бы узнать, какие ещё могут быть решения этой проблемы с памятью?

Желательно вообще не хранить в памяти. Записать, например, все строки в файл и из него с ними работать. Но тут есть две проблемы. В словарь я часто как добавляю, так и удаляю записи. Со словарём эти операции достаточно просты. А в файле для добавления придётся снова открывать файл и записывать в него, а при удалении вообще переписывать файл полностью, не добавляя в него ту строку, которую хочу удалить.

Буду очень благодарен, если кто-то предложит способ хранения данных лучше или поправит меня по поводу методов взаимодействия с данными в файле.


Ответы (2 шт):

Автор решения: Спицко Дмитрий

Используйте sqlite базу данных, получите возможность хранить сколько угодно слов и неплохо оптимизировать поиск

→ Ссылка
Автор решения: Barmaley Red Star

Попробуйте mapdb. Работает примерно так:

DB db = DBMaker.fileDB("myfile.db").make();
String key="myKey";
HTreeMap myMap = db.hashMap("myMap").createOrOpen();
myMap.put(myKey, "Hello World");

HTreeMap - это собственно говоря и есть искомая коллекция расширяющая стандартный класс HashMap, но делающая это на основе дискового образа (по сути БД).

P.S. @andreymal при известной натяжке это и есть серебряная пуля :)

→ Ссылка