встроенная база данных Java с возможностью хранения в виде одного файла
-
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 были бы отличным выбором, если бы у вас не было требований к одному файлу.