Работа с большими объёмами данных java
Сейчас мне необходимо хранить в словаре(HashMap) неограниченное кол-во строк вида "key=value".
Это занимает огромное кол-во памяти и я хотел бы узнать, какие ещё могут быть решения этой проблемы с памятью?
Желательно вообще не хранить в памяти. Записать, например, все строки в файл и из него с ними работать. Но тут есть две проблемы. В словарь я часто как добавляю, так и удаляю записи. Со словарём эти операции достаточно просты. А в файле для добавления придётся снова открывать файл и записывать в него, а при удалении вообще переписывать файл полностью, не добавляя в него ту строку, которую хочу удалить.
Буду очень благодарен, если кто-то предложит способ хранения данных лучше или поправит меня по поводу методов взаимодействия с данными в файле.
Ответы (2 шт):
Используйте sqlite базу данных, получите возможность хранить сколько угодно слов и неплохо оптимизировать поиск
Попробуйте 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 при известной натяжке это и есть серебряная пуля :)