Welches ist besser H2 oder HSQLDB? [geschlossen]

85

HSQLDB 2.0 wird bald veröffentlicht. Ich frage mich, ob es H2 übertreffen wird, da meines Wissens die meisten Benutzer H2 gegenüber HSQLDB bevorzugen. Ich interessiere mich für die MVCC-Unterstützung von HSQLDB 2.0. Ich habe gelernt, dass MVCC auf H2 noch experimentell ist. Was ist in Bezug auf Support / Dokumentation, Parallelität und Leistung zwischen beiden besser?

Dexter
quelle
6
Was ist Ihr Anwendungsfall? Welche Abfragen werden Sie für Ihre Daten durchführen? Wie groß sind Ihre Daten? Ist Ihre Anwendung schwer zu lesen oder zu schreiben?
Matt
27
Eine weitere vollkommen gute Frage wurde geschlossen.
Rtcarlson
Ich finde es faszinierend, dass der Fokus auf Antworten Leistung zu sein scheint, obwohl die Frage dies nur als einen der Aspekte erwähnt. Ich würde mich viel mehr für andere Bereiche interessieren, von Support / Dokument, Benutzerfreundlichkeit (Benutzerfreundlichkeit, Intuitivität, Funktionsumfang), Zuverlässigkeit und dergleichen.
StaxMan
Werfen
Beto Neto

Antworten:

61

Bitte beachten Sie, dass ich diese Antwort im Jahr 2011 gegeben habe. Sie ist möglicherweise veraltet

Mein Unternehmen entwickelt eine Datenbankabstraktionsbibliothek ( jOOQ ), die beide Datenbanken unterstützt. Unsere Integrationstests decken eine Vielzahl von Funktionen ab, einschließlich des Aufrufs gespeicherter Prozeduren und Funktionen, Arrays, verschachtelter Auswahlen usw. Ich bin HSQLDB 2.1in H2 1.3Bezug auf DML etwas schneller als bei kleinen Datenbanken.

HSQLDB übertrifft H2 jedoch sowohl bei DDL-Vorgängen als auch beim Starten / Herunterfahren der Instanz selbst für eine kleine Datenbank erheblich (aufgrund der erneuten Kompilierung gespeicherter Funktionen von H2 mit Javac bei jedem Datenbankstart!) . Dies hängt davon ab, wie Sie gespeicherte Funktionen speichern. Anscheinend ist das ein eher jOOQ-spezifisches "Problem", siehe auch Thomas Muellers Kommentar.

Auf der anderen Seite stimme ich dem Benutzer trashgod zu, dass Sie die Leistung anhand eines angemessenen Schemas und Anwendungsfalls für sich selbst testen sollten.

Lukas Eder
quelle
7
Gespeicherte Funktionen werden nur neu kompiliert, wenn sie "als Quellcode" gespeichert sind. Dies ist eine Funktion, die in HSQLDB (soweit ich weiß) nicht verfügbar ist. Wenn Sie vorkompilierte gespeicherte Funktionen verwenden, gibt es keinen solchen Overhead.
Thomas Mueller
2
@ ThomasMueller: Danke, das wusste ich nicht. Das wird meine Integrationstests massiv beschleunigen. Ich werde meine Antwort entsprechend anpassen. HSQLDB verfügt über eine PL / SQL-ähnliche prozedurale Sprache, die IMO leistungsfähiger ist. Ich bin mir jedoch nicht sicher, ob diese Sprache vorkompiliert oder interpretiert wurde ...
Lukas Eder
45

Beide HyperSQLund H2 Databasesind ziemlich transparent, daher kann das Testen der beste Ansatz sein, um festzustellen, welcher für eine bestimmte Verwendung besser geeignet ist. Vergleiche zwischen dem einen und dem anderen sind verfügbar. Sie teilen ein gemeinsames Erbe und beide sind Open Source .

Müllgott
quelle
10
"Der Mülleimer ist ein wichtiges Designwerkzeug" - loc. cit.
Trashgod
3
Vielen Dank für diesen "Erbe" -Link. Sie fassen die Geschichte ziemlich wunderbar zusammen. Zuerst kam HSQLDB (Hypersonic SQL), dann kam H2, aber HSQLDB und H2 teilen nicht denselben Code und sind ab heute separate Projekte.
specialk1st
1
@ specialk1st: Richtig, das Erbe ist in diesem Fall ein gemeinsamer Autor, kein gemeinsamer Code.
Trashgod