Java-встроенная библиотека базы данных с ключом на диске

То, что я думаю, что я ищу, - это база данных, не содержащая SQL, встроенная библиотека, на диске (то есть не в памяти), которая доступна из java (и предпочтительно работает внутри моего экземпляра JVM). Это не очень большая база данных, и я испытываю соблазн сыграть свою роль. В принципе, я ищу "часть содержимого базы данных" в памяти или на диске.

Наша модель выросла до нескольких гигабайт. Сейчас все это делается в памяти, а это значит, что мы нажимаем JVM на несколько гигабайт. В настоящее время все они хранятся в плоском XML файле, сериализованы и десериализованы с помощью xstream и сжаты с помощью Java'a, встроенных в gzip-библиотеки. Это хорошо работает, когда наша модель остается ниже 100 МБ, но теперь она больше, чем ее проблема.

свободно говоря, что модель может быть разбита на

  • Project
    • компонент конфигурации (направленный-ациклический-граф), а вовсе не дружественный к базе данных
    • список из дюжины "экспериментальных" структур
      • каждый из которых содержит список из около дюжины структур "run-model".
        • каждая модель запуска содержит сотни мегабайт данных. После написания они никогда не редактируются.

Что бы я хотел сделать, это иметь что-то, что соответствует интерфейсу карты, руководства → run-model. Эта мини-база данных будет содержать плоскую таблицу этих объектов. В нашей модели экспериментов мы заменили бы список run-models на список команд и добавим на уровне приложения вызов get к этой карте, который вытащил бы его с диска и в память.

Это означает, что мы можем сохранить конфигурацию нашей программы в XML (которой я очень доволен) и сохранить таблицу больших данных в СУБД, которая не позволит нам потреблять много-ГБ памяти. При запуске и завершении программы я мог бы загрузить и выгрузить две части нашей модели (раздел конфигурации в XML и модели выполнения в формате базы данных) из формата архивирования.

Я как бы чувствую, что об этом говорю, и думаю, что я мог бы реализовать его с помощью некоторых стратегий проверки XML-контента X-Stream и пользовательской реализации карты, но что-то вроде голоса в моей голове говоря, что я должен найти библиотеку, чтобы сделать это вместо этого.

Должен ли я запускать свой собственный или есть база данных, которая достаточно мала, чтобы соответствовать этому счету?

Спасибо, ребята,

-Geoff

Ответы

Ответ 2

Так как MapDB - это возможное решение для вашей проблемы, Chronicle Map также заслуживает внимания. Это встроенное хранилище ключей Java, необязательно постоянное, предлагающее очень похожую модель программирования MapDB: оно также через интерфейс vanilla java.util.Map и прозрачную сериализацию ключей и значений.

Основное отличие состоит в том, что согласно сторонним критериям, "Хроника карты" быстрее, чем MapDB.

Что касается стабильности, то в течение нескольких месяцев не было обнаружено ошибок в хранилище данных хроники, хотя оно активно используется во многих проектах.

Отказ от ответственности: я являюсь разработчиком карты хроники.