Ответ 1
Кажется, есть несколько портов Google LevelDB в Java:
Затем здесь имеется целый список встроенных баз данных 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 заключалась в том, что у меня всегда будет эта "карта карт", и внутренняя карта будет постоянно развиваться, поэтому я не хочу слишком структурированного.
Кажется, есть несколько портов Google LevelDB в Java:
Затем здесь имеется целый список встроенных баз данных Java:
В вашем случае использования я бы рекомендовал MapDB (http://www.mapdb.org)
Он соответствует вашим требованиям:
и имеет другие приятные функции, такие как транзакции, concurrency и производительность.
Chronicle-Map
- новый приятный игрок в этом поле.
Map
реализацияConcurrentHashMap
)Вы можете заглянуть в berkeley DB
http://docs.oracle.com/cd/E17277_02/html/GettingStartedGuide/index.html
Он эффективен при работе с большим количеством данных и его ключевым/значением. Я не могу больше рассказать об этом, так как я сам это обнаружил, но если у вас есть время, чтобы заглянуть в него...
Вы можете просто придерживаться файла XML или JSON. Ни один из них не требует схемы и довольно легко перемещаться между диском и памятью, особенно если производительность действительно не имеет большого значения. (например, вы время от времени загружаете конфиги)
Преимущество в том, что XML и JSON очень просты и имеют дело с картами довольно хорошо.
У вас также есть более легкая зависимость от приложения. Вся встроенная система DB-типа довольно тяжелая, если вы просто сохраняете/не сохраняете большую структуру данных, когда вам нужно и не использовать какие-либо запросы или подобные возможности, которые будут добавлены в большинстве встроенных решений.
Чтобы отбирать ваши требования, он встроен в Java по большей части, легко поддается резервному копированию, поскольку это просто файл, очень встраиваемый, очень много Open Source, а не SQL. XML может быть немного многословным и громоздким порой, но это хорошо известный домен и имеет очень богатые инструменты, окружающие его, чтобы вы могли обращаться с ним по внешнему виду вашего приложения, если это необходимо.
Поздняя часть, но вы можете использовать Tayzgrid. Его открытый источник и его встроенный кэш могут быть встроены в ваше приложение. В основном это сетка данных с памятью или В хранилище значений ключа памяти, но она также обладает желаемой способностью, т.е. Является простым встроенным значением ключа в процессе магазин.
Оформить заказ www.jsondb.io
Это чистая Java-встраиваемая легкая база данных, которая хранит свои данные в виде файлов, что упрощает резервное копирование