Что лучше H2 или HSQLDB? [закрыто]

85

Скоро будет выпущен HSQLDB 2.0. Интересно, превзойдет ли он H2, поскольку, насколько я знаю, большинство пользователей предпочитают H2, чем HSQLDB. Меня интересует поддержка MVCC HSQLDB 2.0. Я узнал, что MVCC на H2 все еще экспериментальный. Что касается поддержки / документации, параллелизма, производительности, что лучше между ними?

декстер
источник
6
Какой у вас вариант использования? Какие запросы вы будете выполнять в отношении своих данных? Насколько велики ваши данные? Ваше приложение тяжело читает или пишет?
Мэтт
27
Еще один совершенно хороший вопрос закрыт.
rtcarlson 02
Я нахожу увлекательным, что сосредоточение внимания на ответах, кажется, связано с производительностью, несмотря на то, что вопрос упоминает это только как один из аспектов. Меня бы больше интересовали другие области, такие как поддержка / документация, удобство использования (простота использования, интуитивность, набор функций), надежность и тому подобное.
StaxMan
Взгляните на jpab.org/Hibernate/H2/embedded/Hibernate/HSQLDB/embedded.html
Бето Нето

Ответы:

61

Обратите внимание, что я дал этот ответ в 2011 году. Возможно, он устарел.

Моя компания разрабатывает библиотеку абстракции баз данных ( jOOQ ), которая поддерживает обе базы данных. Наши интеграционные тесты охватывают множество функций, включая вызов хранимых процедур и функций, массивов, вложенных выборок и т. Д. Я считаю, что HSQLDB 2.1в том, H2 1.3что касается DML, они немного быстрее, чем для небольших баз данных.

Однако HSQLDB значительно превосходит H2 в операциях DDL, а также при запуске / завершении работы экземпляра даже для небольшой базы данных (из-за того, что H2 компилирует сохраненные функции заново с помощью javac при каждом запуске базы данных!) . Это зависит от того, как вы храните сохраненные функции. По-видимому, это скорее "проблема" jOOQ, см. Также комментарий Томаса Мюллера.

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

Лукас Эдер
источник
7
Сохраненные функции перекомпилируются только в том случае, если они хранятся «как исходный код», а эта функция недоступна в HSQLDB (насколько мне известно). Если вы используете предварительно скомпилированные сохраненные функции, то таких накладных расходов нет.
Томас Мюллер,
2
@ThomasMueller: Спасибо, я этого не знал. Это поможет значительно ускорить мои интеграционные тесты. Я адаптирую свой ответ соответственно. HSQLDB имеет процедурный язык, подобный PL / SQL, который является более мощным IMO. Я не уверен, что этот язык предварительно скомпилирован или интерпретирован ...
Лукас Эдер
45

Оба HyperSQLи H2 Databaseдостаточно прозрачны, поэтому тестирование может быть лучшим подходом для определения того, что больше подходит для конкретного использования. Доступны сравнения, включающие одно и другое . У них общее наследие , и оба имеют открытый исходный код .

мусорный бог
источник
10
«Мусорное ведро - важный инструмент дизайна» - loc. соч.
trashgod
3
Спасибо за ссылку "наследие". Они прекрасно обобщают историю. Сначала появился HSQLDB (Hypersonic SQL), затем появился H2, но HSQLDB и H2 не используют один и тот же код и на сегодняшний день являются отдельными проектами.
specialk1
1
@ specialk1st: Верно, в данном случае наследием является общий автор, а не общий код.
trashgod