встроенная база данных Java с возможностью хранения в виде одного файла

StackOverflow https://stackoverflow.com/questions/1160437

  •  18-09-2019
  •  | 
  •  

Вопрос

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

Существует ли авторитетная встроенная база данных Java, которая имеет возможность хранить данные в одном файле?Единственное, о чем я знаю, - это SQLite (доступны привязки Java).Я пробовал H2 и HSQLDB, но из коробки они, похоже, создают несколько файлов, и мне крайне желательно иметь базу данных в одном файле.

Редактировать: важна достаточно быстрая производительность.Хранилище объектов не является;из соображений производительности мне нужно хранить только целые числа и большие двоичные объекты.(+ несколько строк, но ничего критичного для производительности)

правка 2: эффективность хранения данных важна для больших наборов данных, поэтому XML отсутствует.

Это было полезно?

Решение 10

Я думаю, что сейчас я просто продолжу использовать HDF5 для постоянного хранения данных в сочетании с H2 или какой-либо другой базой данных для индексации в памяти.Я не могу заставить SQLite использовать BLOB-объекты с имеющимся у меня драйвером Java, и я не могу запустить встроенный Firebird, и я пока не доверяю H2 с PAGE_STORE.

Другие советы

База данных нитритов http://www.dizitart.org/nitrite-database.html

База данных объектов NoSQL (NO2, также известная как Nitrite) представляет собой nosql с открытым исходным кодом встроенное хранилище документов, написанное на Java с API, подобным MongoDB.Он поддерживает как постоянное хранилище в памяти, так и на основе одного файла.

Если вам нужен только доступ для чтения, H2 может это сделать. прочитать файлы базы данных из zip-файла.

Аналогично, если вам не требуется постоянство, можно иметь версию H2, хранящуюся только в памяти.

Если вам нужен как доступ для чтения/записи, так и постоянство, то вам может не повезти со стандартными базами данных типа SQL, поскольку почти все они единообразно поддерживают файлы индекса и данных отдельно.

H2 использует только один файл, если вы используете последнюю сборку H2 с опцией PAGE_STORE.Это новая функция, поэтому она может быть ненадежной.

Однажды я использовал объектную базу данных, которая сохраняла свои данные в файл.Он имеет интерфейс Java и .NET.Возможно, вы захотите это проверить.Это называется db4o.

Карта летописи представляет собой встроенную базу данных на чистом Java.

  • Он хранит данные в одном файле, т.е.е.

    ChronicleMap<Integer, String> map = ChronicleMap
        .of(Integer.class, String.class)
        .averageValue("my-value")
        .entries(10_000)
        .createPersistedTo(databaseFile);
    
  • Карта хроник является зрелой (в течение нескольких месяцев не сообщалось о серьезных ошибках в хранилище, пока она активно используется).

  • Независимые тесты показывают, что Chronicle Map быстрейший и наиболее эффективный по памяти хранилище ключей-значений для Java.

Основным недостатком вашего варианта использования является то, что Chronicle Map поддерживает только простую модель «ключ-значение», однако на ее основе можно построить более сложное решение.

Отказ от ответственности:Я разработчик Chronicle Map.

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

Это не механизм SQL, но если вы используете Превайлер с XStream, вы можете легко создать один XML-файл со всеми вашими данными.(Prevayler называет это файлом моментального снимка.)

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

Вы можете проверить JDBM — мы используем его в нескольких проектах, и это довольно быстро.Он использует 2 файла (файл базы данных и файл журнала), если вы используете его для приложений типа ACID, но вы можете перейти непосредственно к прямому доступу к базе данных (без файла журнала), если вам не нужен надежный ACID.

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

Поскольку вы упомянули sqlite, я предполагаю, что вы не против собственной базы данных (при условии, что доступны хорошие привязки Java). Жар-птица хорошо работает с Java и по умолчанию хранит один файл.

И H2, и HSQLDB были бы отличным выбором, если бы у вас не было требований к одному файлу.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top