Ищу замену для java.util.Map

Проблема

В продолжение этого вопроса кажется, что реализация 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 сейчас выглядят разумно. Какие-либо конкретные рекомендации в любом направлении?

13
задан Community 23 May 2017 в 11:53
поделиться