2010-04-30 3 views
73

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

+6

Каков ваш прецедент? Какие запросы вы будете выполнять против ваших данных? Насколько велики ваши данные? Ваше приложение читает или пишет тяжело? – Matt

+14

Другой отличный вопрос закрыт. – rtcarlson

+0

Мне кажется увлекательным, что сосредоточиться на ответах, похоже, на производительность, несмотря на то, что вопрос упоминается только как один из аспектов. Меня больше интересуют другие области: поддержка/док, удобство использования (простота использования, интуитивность, набор функций), надежность и т. Д. – StaxMan

ответ

41

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

+7

«корзина для мусора - важный инструмент проектирования» - [_ loc. cit._] (http://stackoverflow.com/a/22259102/230513) – trashgod

+2

Спасибо за ссылку «наследие». Они суммируют историю довольно чудесно. Сначала появился HSQLDB (Hypersonic SQL), затем появился H2, но HSQLDB и H2 не используют один и тот же код и являются отдельными проектами на сегодняшний день. – specialk1st

+1

@ specialk1st: Правильно, _heritage_ в этом случае является общим автором, а не распространенным кодом. – trashgod

53

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

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

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

+5

Сохраненные функции только перекомпилируются, если они хранятся «как исходный код», что является функцией, недоступной в HSQLDB (насколько я знаю). Если вы используете предварительно скомпилированные хранимые функции, то таких накладных расходов нет. –

+1

@ThomasMueller: Спасибо, я этого не знал. Это поможет значительно ускорить мои интеграционные тесты. Я соответствующим образом адаптирую свой ответ. HSQLDB имеет процедурный язык PL/SQL, который является более мощным IMO. Я не уверен, хотя, если этот язык предварительно скомпилирован или интерпретирован ... –