Проблема
В продолжение этого вопроса кажется, что реализация Map
на основе файла или диска может быть правильным решением проблем, о которых я там упоминал. Краткая версия:
- Прямо сейчас у меня есть
Map
, реализованная как ConcurrentHashMap
.
- Записи добавляются в нее постоянно, с довольно фиксированной скоростью. Подробности об этом позже.
- В конце концов, несмотря ни на что, это означает, что JVM исчерпывает пространство кучи.
На работе мне (настоятельно) предлагалось решить эту проблему с помощью SQLite, но после того, как я задал предыдущий вопрос , Я не думаю, что база данных - правильный инструмент для этой работы. Итак - дайте мне знать, если это звучит безумно - я думаю, что лучшим решением будет Карта
, хранящаяся на диске.
Плохая идея: реализовать это самостоятельно. Лучшая идея: используйте чужую библиотеку! Какой?
Требования
Необходимые:
- Бесплатные.
- Постоянные. Данные должны оставаться в памяти между перезапусками JVM.
- Некоторая возможность поиска. Да, мне нужна возможность получить эти чертовы данные, а также убрать их. Базовая фильтрация набора результатов является плюсом.
- Независимость от платформы. Требуется возможность производственного развертывания на машинах Windows или Linux.
- Purgeable . Дисковое пространство ограничено, как и пространство кучи. Мне нужно избавиться от записей возрастом
n
дней. Ничего страшного, если мне придется делать это вручную.
Приятно иметь:
- Простота использования. Было бы здорово, если бы я смог заставить это работать к концу недели.
А еще лучше: конец дня. Было бы действительно, действительно здорово, если бы я мог добавить один JAR к моему пути к классам, изменив new ConcurrentHashMap ();
на new SomeDiskStoredMap ();
и готово.
- Достойная масштабируемость и производительность. Худший случай: новые записи добавляются (в среднем) 3 раза в секунду, каждую секунду, в течение всего дня, каждый день. Однако вставки не всегда проходят так гладко. Это может быть
(без вставок в течение часа)
, затем (вставить сразу 10 000 объектов)
.
Возможные решения
- Ehcache ? Никогда раньше не пользовался. Это было предложенное решение моего предыдущего вопроса.
- Berkeley DB ? Опять же, я никогда им не пользовался, и правда не умею. Я ничего об этом не знаю.
- Hadoop (и какой подпроект)? Не использовал. Судя по этим документам , его кроссплатформенность для меня неоднозначна. В обозримом будущем мне не понадобится распределенная операция.
- Драйвер JDBC SQLite в конце концов?
- ???
И Ehcache, и Berkeley DB сейчас выглядят разумно. Какие-либо конкретные рекомендации в любом направлении?
задан Community 23 May 2017 в 11:53
поделиться