Подтвердить что ты не робот

Какая встроенная БД написана на Java для простого хранилища ключей/значений?

Недавно я задал вопрос о Neo4j, который я получил, и который кажется приятным. Он внедряется и написан на Java и не существует (слишком) многих зависимостей.

Однако это графа DB, и я не знаю, хорошая ли это или не использовать ее как просто хранилище ключей/значений.

В принципе у меня есть большая карта, которая в Java будет выглядеть так:

Map<Integer,Map<String,String>>

У меня есть несколько десятков миллионов записей на главной карте, и каждая запись содержит карту свойств/значений. "Внутренняя" карта относительно невелика: около 20 записей.

Мне нужно, чтобы эта карта сохранялась при запуске webapp в другой.

Используя Neo4j, я создал один node для каждого идентификатора (целое число), а затем поместил одно свойство для каждой записи внутри внутренней карты. С моего раннего тестирования это работает, но я не уверен, что это хороший способ продолжить.

Какой внедряемый DB, написанный на Java, вы бы использовали?

Требования:

  • написан на Java

  • embeddable (поэтому ничего слишком большого)

  • не SQL (*)

  • с открытым исходным кодом

  • простое резервное копирование (мне нужно сделать "живые" резервные копии, пока сервер работает)

Моя терминология может быть немного неправильной, так что не стесняйтесь помогать мне/исправлять меня. Для моей "карты карт" наилучшее соответствие будет битой пары ключ/значение справа?

Я немного потерялся как разница между парами ключей/значений DB, документами DB, большими таблицами, графическими DB и т.д.

Мне также хотелось бы, если бы неплохо было использовать графический DB, такой как Neo4J, для моей потребности (я думаю, что производительность действительно не будет проблемой, учитывая относительно небольшое количество записей, которые у меня будут).

Конечно, я мог бы просто сохранить карту карт самостоятельно, но я действительно не хочу изобретать любое колесо здесь. Я хочу повторно использовать проверенный и проверенный DB...

(*) Причина, по которой я не хочу, чтобы SQL заключалась в том, что у меня всегда будет эта "карта карт", и внутренняя карта будет постоянно развиваться, поэтому я не хочу слишком структурированного.

4b9b3361

Ответ 2

В вашем случае использования я бы рекомендовал MapDB (http://www.mapdb.org)

Он соответствует вашим требованиям:

  • написан на Java
  • embeddable - единственная банка без зависимостей
  • not SQL - дает вам карты, которые сохраняются на диске
  • с открытым исходным кодом (лицензия Apache 2)
  • простая резервная копия (несколько файлов)

и имеет другие приятные функции, такие как транзакции, concurrency и производительность.

Ответ 3

Chronicle-Map - новый приятный игрок в этом поле.

  • Это автономное место (с возможностью сохранения на диске с помощью файлов с отображением памяти) Map реализация
  • Super-fast - поддерживает миллионы запросов/обновлений в секунду, т.е. е. каждый запрос имеет субмикросекундную задержку в среднем
  • Поддерживает одновременные обновления (предполагается, что это замена ConcurrentHashMap)
  • Специальная поддержка указанных вами свойств карт, если набор свойств фиксирован в коллекции - позволяет обновлять определенные свойства значения без сериализации/десериализации всего значения (20 полей). Эта функция называется созданием значения данных в проекте Chronicle/Lang.
  • И многое другое...

Ответ 4

Вы можете заглянуть в berkeley DB

http://docs.oracle.com/cd/E17277_02/html/GettingStartedGuide/index.html

Он эффективен при работе с большим количеством данных и его ключевым/значением. Я не могу больше рассказать об этом, так как я сам это обнаружил, но если у вас есть время, чтобы заглянуть в него...

Ответ 5

Вы можете просто придерживаться файла XML или JSON. Ни один из них не требует схемы и довольно легко перемещаться между диском и памятью, особенно если производительность действительно не имеет большого значения. (например, вы время от времени загружаете конфиги)

Преимущество в том, что XML и JSON очень просты и имеют дело с картами довольно хорошо.

У вас также есть более легкая зависимость от приложения. Вся встроенная система DB-типа довольно тяжелая, если вы просто сохраняете/не сохраняете большую структуру данных, когда вам нужно и не использовать какие-либо запросы или подобные возможности, которые будут добавлены в большинстве встроенных решений.

Чтобы отбирать ваши требования, он встроен в Java по большей части, легко поддается резервному копированию, поскольку это просто файл, очень встраиваемый, очень много Open Source, а не SQL. XML может быть немного многословным и громоздким порой, но это хорошо известный домен и имеет очень богатые инструменты, окружающие его, чтобы вы могли обращаться с ним по внешнему виду вашего приложения, если это необходимо.

Ответ 6

Поздняя часть, но вы можете использовать Tayzgrid. Его открытый источник и его встроенный кэш могут быть встроены в ваше приложение. В основном это сетка данных с памятью или В хранилище значений ключа памяти, но она также обладает желаемой способностью, т.е. Является простым встроенным значением ключа в процессе магазин.

Ответ 7

Оформить заказ www.jsondb.io

Это чистая Java-встраиваемая легкая база данных, которая хранит свои данные в виде файлов, что упрощает резервное копирование