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


85

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


6
Какой у вас вариант использования? Какие запросы вы будете выполнять в отношении своих данных? Насколько велики ваши данные? Ваше приложение тяжело читает или пишет?
— Мэтт

27
Еще один совершенно хороший вопрос закрыт.
— rtcarlson 02

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

Ответы:


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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.