Що краще H2 або HSQLDB? [зачинено]


85

Незабаром буде випущений HSQLDB 2.0. Цікаво, чи він перевершить H2, оскільки, наскільки мені відомо, більшість користувачів віддають перевагу H2, ніж HSQLDB. Я зацікавлений у підтримці MVCC HSQLDB 2.0. Я дізнався, що MVCC щодо H2 все ще експериментальний. Що стосується підтримки / документації, одночасності та продуктивності, що краще між ними?


6
Який ваш варіант використання? Які запити ви будете виконувати щодо своїх даних? Наскільки великі ваші дані? Ваша програма для читання чи написання важка?
— Matt

27
Ще одне цілком гарне питання закрите.
— rtcarlson,

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

Відповіді:


61

Зверніть увагу, що я дав цю відповідь у 2011 році. Можливо, вона застаріла

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

Однак HSQLDB значно перевершує H2 в операціях DDL, а також при запуску / вимкненні екземпляра, навіть для невеликої бази даних (завдяки компіляції H2 збережених функцій заново за допомогою Javaca при кожному запуску бази даних!) . Це залежить від способу зберігання збережених функцій. Очевидно, це досить специфічна для jOOQ "проблема", див. Також коментар Томаса Мюллера.

З іншого боку, я погоджуюсь з користувачем trashgod, вам слід перевірити ефективність за розумною схемою та варіантом використання для себе.


7
Збережені функції перекомпілюються лише в тому випадку, якщо вони зберігаються "як вихідний код", що є функцією, яка недоступна в HSQLDB (наскільки мені відомо). Якщо ви використовуєте попередньо скомпільовані збережені функції, то таких накладних витрат немає.
— Томас Мюллер,

2
@ThomasMueller: Дякую, я цього не знав. Це допоможе значно пришвидшити мої інтеграційні тести. Відповідно адаптую свою відповідь. HSQLDB має PL / SQL-подібну процедурну мову, яка є потужнішою IMO. Але я не впевнений, якщо ця мова попередньо складена або інтерпретована ...
— Лукас Едер,

45

І те, HyperSQLі H2 Databaseінше є досить прозорими, тому тестування може бути найкращим підходом для визначення того, що більше підходить для певного використання. Порівняння за участю одного та іншого доступні. Вони мають спільну спадщину , і обидва вони мають відкрите джерело .


10
"смітник - це важливий інструмент проектування" - loc. цит.
— trashgod

3
Дякую за посилання "спадщина". Вони досить чудово узагальнюють історію. Спочатку з'явився HSQLDB (Гіперзвуковий SQL), потім з'явився H2, але HSQLDB і H2 не мають спільного коду і на сьогодні є окремими проектами.
— specialk1st

1
@ specialk1st: Правильно, спадщина в цьому випадку є загальним автором, а не загальним кодом.
— trashgod
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.