Сравнение встроенных баз данных Java [закрыто]

99

Я собираюсь разработать небольшое (Java) приложение для управления своими финансами. Я считаю, что мне нужно использовать встроенную базу данных, но у меня нет опыта по этой проблеме. Я попытался посмотреть на некоторые из доступных продуктов , но не могу решить, какой из них мне больше подходит. H2 , HSQLDB , Derby и Berkeley DB кажутся хорошими кандидатами, но я все еще не понимаю, как они сравниваются друг с другом. Я ценю вашу помощь в сравнении их и помогаете мне решить, какой из них использовать.

Я намереваюсь использовать Hibernate для своего приложения (если вы не порекомендуете использовать API, предоставляемый СУБД), но я также хочу иметь возможность легко редактировать базу данных с помощью инструмента просмотра SQL (изменение схемы и изменение данных).

Спасибо.

Хосам Али
источник
Не зная, что вы пытаетесь сделать, невозможно ответить на этот вопрос. Я предлагаю обновить вопрос, указав информацию о размере вашего проекта, о том, сколько таблиц, по вашему мнению, у вас будет, сколько записей и т. Д.
Программист-преступник,
3
возможный дубликат встроенных баз данных Java
Хосам Али
5
Обидно, что такие хорошие вопросы закрывают нацисты. Конечно, некоторые расплывчатые вопросы не подходят, но этот, безусловно, подходит. Где «Подходящий» означает полезный для сообщества, а не согласно некоторым юридическим определениям.
Tuntable

Ответы:

60

Либо

  • HSQLDB - используется OpenOffice, протестирован и стабилен. Легко использовать. Если вы хотите отредактировать свои db-данные, вы можете просто открыть файл и отредактировать операторы вставки.

или

  • H2 - Говорят, что быстрее (разработчик, который тоже изначально проектировал hsqldb)

Какой из них вы будете использовать, зависит от вас, в зависимости от того, какая производительность и какая стабильность вам нужна.

Разработчик H2 дал хорошую оценку производительности:
http://www.h2database.com/html/performance.html

Свен Лилиенталь
источник
35

Я использую Apache Derby практически для всех моих встраиваемых баз данных. Вы также можете использовать Java DB от Sun, основанную на Derby, но последняя версия Derby намного новее. Он поддерживает множество опций, которые поддерживают коммерческие собственные базы данных, но он намного меньше по размеру и легче встраивается. У меня было несколько таблиц базы данных с более чем миллионом записей без проблем.

Я использовал HSQLDB и Hypersonic года 3 назад. В то время у него были некоторые серьезные проблемы с производительностью, и я перехожу с него на Derby из-за этих проблем. Дерби был прочным, даже когда он находился в инкубаторе Apache.

Крис Дейл
источник
Дерби был бы великолепен, если бы не тот факт, что в нем так много ошибок, а последнее обновление было несколько лет назад.
Hooli
2
@Hooli Я не могу подтвердить наличие ошибок, но "... последнее обновление было несколько лет назад" неверно. Относительно времени публикации вашего комментария ( август 2016 г. ): выпуск был менее чем за год до ( октябрь 2015 г. ), выпуск через два месяца ( октябрь 2016 г. ) и выпуск чуть более года спустя ( октябрь 2017 г. - последний ).
Slaw
Обновление этого комментария на случай, если кто-то еще встретит эту тему при поиске. Последний выпуск Derby состоялся в марте 2019 года. Вот информация об их сайте: db.apache.org/derby
JavaJd
@Chris Dail Вы использовали дерби для миллионов записей в качестве обычной базы данных, в памяти или для некоторого кеширования?
Shreyans jain
30

Мне нужно было использовать встроенную базу данных Java в одном из моих проектов, и я провел много исследований, чтобы понять плюсы и минусы каждой базы данных. Я написал в блоге список плюсов и минусов популярных встроенных баз данных Java (H2, HSQLDB, Derby, ObjectDB, Neo4j, OrientDB), вы можете взглянуть на него. Я выбрал H2, поскольку считал, что он лучше всего соответствует моим требованиям. Ссылка для блога: http://sayrohan.blogspot.in/2012/12/choosing-light-weight-java-database.html Надеюсь, это поможет!

Рохан Карва
источник
14

HSQLDB - хороший кандидат (тот факт, что он используется в OpenOffice, может убедить некоторых из вас), но для такого небольшого личного приложения почему бы не использовать объектную базу данных (вместо классической базы данных отношений)?

Я использовал DB4O в одном из своих проектов и очень им доволен. Поскольку вы объектно-ориентированы, вам не нужен весь слой Hibernate, и вы можете напрямую вставлять / обновлять / удалять / запрашивать объекты! Более того, вам не нужно беспокоиться о схеме, вы работаете напрямую с объектами, а DB4O сделает все остальное!

Я согласен с тем, что может потребоваться некоторое время, чтобы привыкнуть к этому новому типу базы данных, но посмотрите учебник по DB40, чтобы увидеть, насколько легко он упрощает работу с базой данных !

РЕДАКТИРОВАТЬ: Как сказано в комментариях, DB4O автоматически обрабатывает новые версии классов. Кроме того, здесь доступен инструмент для просмотра и обновления базы данных вне приложения: http://code.google.com/p/db4o-om/

Wookai
источник
2
Спасибо. DB4O выглядит неплохо для такого небольшого проекта, но я считаю, что возможность просматривать и редактировать данные вне приложения очень важна. Также было бы легко обрабатывать новые версии классов? (например, добавленные / удаленные поля)
Хосам Али
Как сказано в моем редактировании, существует инструмент для просмотра и редактирования БД вне приложения. Как сказал Фабиан, новые версии классов обрабатываются автоматически.
Wookai,
Спасибо за обновление. Для меня было очень важно иметь инструмент для просмотра, поэтому большое спасибо.
Хосам Али,
12

Java DB (дистрибутив Sun Apache Derby) теперь поставляется с JDK 6!

Мне хотелось сделать что-то вроде Джейсона Коэна, и я думал, что это выглядит как самый простой способ быть в дистрибутиве JDK (который на прошлой неделе стал требованием для моего приложения). Или, может быть, я просто ленив.

Стю Томпсон
источник
Возможно ты прав! У нас есть требование работать под Java 1.5, так что это не вариант для нас.
Джейсон Коэн,
... Я имел в виду, что ты был прав в том, что это был самый простой способ, а не в том, что был ленивым. :-P
Джейсон Коэн
Java DB поставляется только с реализациями JDK Sun / Oracle. Не стандартная часть Java.
Basil
7

Мы используем HSQLDB в производстве как вариант «без конфигурации» для нашего приложения. Это позволяет людям пробовать без хлопот по настройке реальной базы данных.

Однако мы не поддерживаем его для нормального использования. Причин несколько:

  1. Тормозит пропорционально размеру данных.
  2. Трудно получить доступ за пределами нашего приложения (например, для пользовательских отчетов).
  3. Транзакции / синхронизацию с диском сложно выполнить правильно, поэтому легко потерять данные.

По крайней мере, для (2) и (3) есть способы обойти это, но это сложно; гораздо проще, например, установить MySQL.

Джейсон Коэн
источник
7

neo4j это:

встроенный дисковый, полностью транзакционный механизм сохраняемости Java, который хранит данные, структурированные в виде графиков, а не таблиц

У меня еще не было возможности попробовать, но выглядит очень многообещающе. Обратите внимание, что это не база данных SQL - ваш граф объектов сохраняется для вас, поэтому он может не подходить для вашего существующего приложения.

devstopfix
источник
6

Хороший инструмент сравнения можно найти здесь: http://www.jpab.org/All/All/All.html

Также обратите внимание на прямые сравнения СУБД / JPA

Урос Майерик
источник
5

Большинство вещей уже было сказано, но я могу просто добавить, что я использовал HSQL, Derby и Berkely DB в нескольких своих любимых проектах, и все они работали отлично. Так что я не думаю, что это действительно так важно, если честно. Стоит упомянуть, что HSQL сохраняет себя как текстовый файл с операторами SQL, что неплохо. Делает это действительно простым, когда вы разрабатываете, быстро проводить тесты и настраивать данные. При необходимости может также делать быстрые правки. Думаю, вы могли бы легко перенести все это в любую базу данных, если вам когда-нибудь понадобится что-то изменить :)

willcodejavaforfood
источник
5

HSQLDB может вызвать проблемы для больших приложений, он не так стабилен.

Лучшее, что я слышал (однако не из первых рук), - это berkleyDB. Но если вы не откроете его исходный код, использование его будет стоить вам руки и ноги из-за лицензирования ... см. Http://www.oracle.com/technology/software/products/berkeley-db/htdocs/licensing.html для подробностей.

пс. berkleyDB не является реляционной базой данных, если вы не знали.

Чии
источник
О, я не знал, что Беркли - это не реляционная база данных! Большое спасибо!
Хосам Али,
не значит, что это нехорошо. но я подозреваю, что он, вероятно, слишком хорош для вашего использования, учитывая его для чего-то личного. также взгляните на sqlite. Я думаю, что у него есть привязки к Java, но я не могу его найти.
Chii
4

Я большой поклонник DB4O как для .Net, так и для Java .

Производительность стала намного лучше по сравнению с ранними выпусками. Модель лицензирования тоже неплохая. Мне особенно нравятся параметры, доступные для запросов к вашим объектам. Запрос на примере - очень мощный инструмент, к которому легко привыкнуть.

Килхоффер
источник
4

Какие критерии вы будете использовать для их оценки? Если вы еще не знаете, то вам не нужно прямо сейчас решать. Постарайтесь сделать свое приложение максимально независимым от реализации базы данных, предоставив соответствующие оболочки, объекты доступа к данным и т. Д., И примите это решение, когда у вас есть все факты, и вам нужно принять решение.

Если вы используете реляционные базы данных и SQL, то вышеперечисленное не должно быть слишком сложным (с использованием JDBC и т. Д.). Убедитесь, что у вас есть множество окружающих тестов, чтобы при переключении между базами данных вы могли определить, что функциональность вашего приложения остается прежней.

Некоторое время назад я столкнулся с той же проблемой. Я не знал, какую базу данных выбрать, поэтому в моем первом решении использовался Derby (или HSQLDB?), А позже я смог переключиться на HSQLDB (или Derby? Не могу вспомнить, какое решение сработало), как только определил, где У меня были проблемы (связанные с производительностью), и какое решение мне действительно подойдет.

Брайан Агнью
источник
3

Я использовал Derby, и я действительно ненавижу его функции преобразования типов данных, особенно функции даты / времени. (Тип числа) <--> Преобразование Varchar - это боль.

Так что, если вы планируете использовать преобразования типов данных в операторах БД, рассмотрите возможность использования других встроенных БД, я узнаю об этом слишком поздно.

Последние преобразования типов данных в версии Derby

Telcontar
источник
3

Лично я предпочитаю HSQLDB, но в основном потому, что это был первый вариант, который я пробовал.

Говорят, что H2 работает быстрее и обеспечивает более приятный интерфейс GUI (который, кстати, является общим и работает с любым драйвером JDBC).

По крайней мере, HSQLDB, H2 и Derby предоставляют серверные режимы, которые отлично подходят для разработки, потому что вы можете получить доступ к БД с помощью своего приложения и некоторого инструмента одновременно (что обычно не позволяет встроенный режим).

Иоахим Зауэр
источник
3

Думаю, я немного опоздал (очень поздно ;-)) с этим постом, но я хотел бы добавить Perst, объектно-ориентированную встроенную базу данных с открытым исходным кодом для Java и .NET. на ваше рассмотрение. Perst - это встроенная база данных с открытым исходным кодом / двойной лицензией для Java. Дистрибутив совместим с платформой Google Android, а также включает Perst Lite для Java ME. Мы даже создали тест Android и подготовили технический документ по этому поводу ... вы можете посмотреть здесь: http://www.mcobject.com/index.cfm?fuseaction=download&pageid=581§ionid=133

Всего наилучшего, Крис


источник
3

Если я прав, H2 принадлежит тем же ребятам, которые написали HSQLDB. Намного лучше, если вы доверяете тестам на их сайте. Кроме того, есть мнение, что солнечное сообщество слишком быстро перешло в Дерби.

smartnut007
источник
2
Какие преждевременные представления о дерби беспокоят DerbyDB? Зрелость?
simgineer 05
2

Я понимаю, что вы упомянули просмотр SQL, но все остальное в вашем вопросе заставляет меня предложить вам также рассмотреть DB4O , отличную простую объектную базу данных .

Фабиан Штег
источник
Спасибо. DB4O выглядит неплохо для такого небольшого проекта, но я считаю, что возможность просматривать и редактировать данные вне приложения очень важна. Также было бы легко обрабатывать новые версии классов? (например, добавленные / удаленные поля)
Хосам Али
Да, он поддерживает некоторые рефакторинги автоматически, вы можете найти больше об этом здесь: ibm.com/developerworks/java/library/j-db4o3.html
Fabian Steeg,