Сравнение встроенных баз данных Java
Я намерен разработать небольшое (Java) приложение для управления моими финансами. Я считаю, что мне нужно использовать встроенную базу данных, но у меня нет опыта по этому вопросу. Я попытался посмотреть на некоторые из доступных продуктов, но я не могу решить, какой из них будет более подходящим для меня. H2, HSQLDB, Derby и Berkeley DB кажутся хорошими кандидатами, но я до сих пор не вижу, как они сравниваются друг с другом. Я ценю вашу помощь, сравнивая их и помогая мне решить, какой из них использовать.
Я намерен использовать Hibernate для своего приложения (если вы не порекомендуете использовать API, предоставляемый СУБД), но я также хочу иметь возможность легко редактировать базу данных с помощью инструмента просмотра SQL (изменение схемы и изменение данных).
Спасибо.
18 ответов
Или
- HSQLDB - используется OpenOffice, проверен и стабилен. Это просто в использовании. Если вы хотите редактировать ваши db-данные, вы можете просто открыть файл и отредактировать операторы вставки.
или же
- H2 - Сказано, что будет быстрее (разработчик, который тоже изначально проектировал hsqldb)
Какой из них вы используете, зависит от вашей производительности и стабильности.
Разработчик H2 поставил хорошую оценку производительности:
http://www.h2database.com/html/performance.html
Я использую Apache Derby для почти всех моих потребностей во встроенной базе данных. Вы также можете использовать Java DB от Sun, основанную на Derby, но последняя версия Derby намного новее. Он поддерживает множество опций, которые поддерживают коммерческие, собственные базы данных, но он намного меньше и его легче встраивать. У меня было несколько таблиц базы данных с более чем миллионом записей без проблем.
Раньше я использовал HSQLDB и Hypersonic около 3 лет назад. В то время у него были серьезные проблемы с производительностью, и я перешел на Derby из-за этих проблем. Дерби был твердым, даже когда он был в инкубаторе в Apache.
Мне нужно было использовать встроенную базу данных Java в одном из моих проектов, и я много исследовал, чтобы понять плюсы и минусы каждой базы данных. Я написал блог, в котором перечислены плюсы и минусы популярных встроенных баз данных Java (H2, HSQLDB, Derby, ObjectDB, Neo4j, OrientDB), вы можете посмотреть на них. Я выбрал H2, так как считал, что он лучше всего соответствует моим требованиям. Ссылка для блога: http://sayrohan.blogspot.in/2012/12/choosing-light-weight-java-database.html Надеюсь, это поможет!
Я бы пошел с H2, производительность предназначена гораздо лучше, чем Дерби. Прочитайте http://www.h2database.com/html/performance.html для получения дополнительной информации.
HSQLDB - хороший кандидат (тот факт, что он используется в OpenOffice может убедить некоторых из вас), но для такого небольшого личного приложения, почему бы не использовать объектную базу данных (вместо классической реляционной базы данных)?
Я использовал DB4O в одном из своих проектов, и я очень доволен этим. Будучи объектно-ориентированным, вам не нужен весь слой Hibernate, и вы можете напрямую вставлять / обновлять / удалять / запрашивать объекты! Более того, вам не нужно беспокоиться о схеме, вы напрямую работаете с объектами, а DB4O сделает все остальное!
Я согласен, что может потребоваться некоторое время, чтобы привыкнуть к этому новому типу базы данных, но посмотрите руководство по DB40, чтобы увидеть, как легко работать с БД!
РЕДАКТИРОВАТЬ: Как сказано в комментариях, DB4O автоматически обрабатывает более новые версии классов. Кроме того, инструмент для просмотра и обновления базы данных вне приложения доступен здесь: http://code.google.com/p/db4o-om/
Java DB (дистрибутив Sun Apache Derby) теперь поставляется в JDK 6!
Я хотел сделать что-то вроде Джейсона Коэна и думал, что это выглядит как самый простой способ быть в дистрибутиве JDK (что на прошлой неделе стало обязательным требованием для моего приложения). Или, может быть, я просто ленив в этом смысле.
HSQLDB может вызвать проблемы для больших приложений, но он не совсем стабилен.
Лучшее, что я слышал (но не из первых рук) - это berkleyDB. Но если вы не откроете исходный код, вам будет стоить рука и нога в использовании из-за лицензирования... см. Это http://www.oracle.com/technology/software/products/berkeley-db/htdocs/licensing.html для деталей.
пс. berkleyDB - это не реляционная база данных, если вы не знали.
neo4j это:
встроенный дисковый полностью транзакционный движок Java, который хранит данные, структурированные в виде графиков, а не в виде таблиц
У меня еще не было возможности попробовать это, но это выглядит очень многообещающе. Обратите внимание, что это не база данных SQL - ваш граф объектов сохраняется для вас, поэтому он может не подходить для вашего существующего приложения.
Мы используем HSQLDB на производстве в качестве опции "без конфигурации" для нашего приложения. Это позволяет людям судить без необходимости создания реальной базы данных.
Однако мы не поддерживаем его для нормального использования. Причин несколько:
- Замедляется пропорционально размеру данных.
- Трудно получить доступ за пределами нашего приложения (например, для пользовательских отчетов).
- Транзакции / синхронизация диска трудно понять правильно, поэтому легко потерять данные.
По крайней мере, для (2) и (3) есть способы обойти это, но это сложно; гораздо проще, например, установить MySQL.
Хороший инструмент сравнения можно найти здесь: http://www.jpab.org/All/All/All.html
Обратите также внимание на сравнение СУБД /JPA лицом к лицу
Большинство вещей уже сказано, но я могу только добавить, что я использовал HSQL, Derby и Berkely DB в нескольких моих любимых проектах, и все они работали просто отлично. Поэтому я не думаю, что это действительно важно, если честно. Стоит отметить, что HSQL сохраняет себя в виде текстового файла с инструкциями SQL, что весьма неплохо. Когда вы разрабатываете, очень легко выполнять тесты и быстро настраивать данные. Можно также сделать быстрые изменения, если это необходимо. Думаю, вы могли бы легко перенести все это в любую базу данных, если вам когда-либо понадобится это изменить:)
Какие критерии вы будете использовать для их оценки? Если вы еще не знаете, то вам не нужно решать прямо сейчас. Постарайтесь сделать свое приложение максимально независимым от реализации базы данных - предоставляя соответствующие обертки, объекты доступа к данным и т. Д., И принимайте это решение, когда у вас есть все факты, которые вам нужно принять, и вам нужно принять решение.
Если вы используете реляционные базы данных и SQL, вышеописанное не должно быть слишком сложным (с использованием JDBC и т. Д.). Убедитесь, что у вас есть множество окружающих тестов, чтобы, когда вы хотите переключаться между базами данных, вы могли определить, что функциональность вашего приложения остается прежней.
Я столкнулся с той же проблемой некоторое время назад. Я не знал, какую базу данных использовать, поэтому мое первое решение использовало Derby (или HSQLDB?), И позже я смог переключиться на HSQLDB (или Derby? Не могу вспомнить, какое решение работало), как только я определил, где У меня были проблемы (связанные с производительностью), и какое решение действительно помогло бы мне.
Я большой поклонник DB4O для.Net и Java.
Производительность стала намного лучше с ранних выпусков. Модель лицензирования тоже не плохая. Мне особенно нравятся опции, доступные для запроса ваших объектов. Запрос на примере очень мощный и к нему легко привыкнуть.
Если я прав, H2 от тех же ребят, которые написали HSQLDB. Намного лучше, если вы доверяете тестам на их сайте. Также есть мнение, что солнечное сообщество слишком быстро прыгнуло в Дерби.
Я использовал Derby, и я действительно ненавижу его функции преобразования типов данных, особенно функции даты / времени. (Number Number)<-> Преобразование Varchar - это боль.
Так что, если вы планируете использовать преобразования типов данных в своих выражениях БД, подумайте об использовании встроенной БД, я узнаю об этом слишком поздно.
Я лично предпочитаю HSQLDB, но в основном потому, что это было первое, что я попробовал.
Говорят, что H2 быстрее и обеспечивает более приятный интерфейс с графическим интерфейсом (кстати, он универсален и работает с любым драйвером JDBC).
По крайней мере, HSQLDB, H2 и Derby предоставляют серверные режимы, которые отлично подходят для разработки, потому что вы можете получить доступ к БД с помощью своего приложения и некоторого инструмента одновременно (который встроенный режим обычно не позволяет).
Думаю, я немного опоздал (очень поздно;-)) на этот пост, но я бы хотел добавить Perst, объектно-ориентированную встроенную базу данных с открытым исходным кодом для Java и.NET. на ваше рассмотрение. Perst - это встроенная база данных с открытым исходным кодом и двойной лицензией для Java. Дистрибутив совместим с платформой Android от Google, а также включает Perst Lite для Java ME. Мы даже создали эталонный тест Android и подготовили технический документ по этому вопросу... вы можете посмотреть здесь: http://www.mcobject.com/index.cfm?fuseaction=download&pageid=581§ionid=133
Всего наилучшего, Крис
Я понимаю, что вы упомянули просмотр SQL, но все остальное в вашем вопросе заставляет меня предложить вам также рассмотреть DB4O, которая является отличной, простой объектной БД.