Który jest lepszy H2 czy HSQLDB? [Zamknięte]

85

Wkrótce zostanie wydany HSQLDB 2.0. Zastanawiam się, czy osiągnie lepsze wyniki niż H2, ponieważ o ile wiem, większość użytkowników woli H2 niż HSQLDB. Jestem zainteresowany obsługą MVCC w HSQLDB 2.0. Dowiedziałem się, że MVCC na H2 jest nadal w fazie eksperymentalnej. Jeśli chodzi o wsparcie / dokumentację, współbieżność, wydajność, co jest lepsze między nimi?

zręczny
źródło
6
Jaki jest Twój przypadek użycia? Jakie zapytania będziesz wykonywać w odniesieniu do swoich danych? Jak duże są Twoje dane? Czy Twoja aplikacja czyta lub zapisuje ciężko?
Matt,
27
Kolejne całkiem dobre pytanie zamknięte.
rtcarlson
Fascynujące jest to, że skupianie się na odpowiedziach wydaje się być performansem, mimo że pytanie dotyczy tylko jednego z aspektów. Byłbym bardziej zainteresowany innymi obszarami, takimi jak support / doc, użyteczność (łatwość obsługi, intuicyjność, zestaw funkcji), niezawodność i tym podobne.
StaxMan

Odpowiedzi:

61

Pamiętaj, że udzieliłem tej odpowiedzi w 2011 roku. Może być nieaktualna

Moja firma rozwija bibliotekę abstrakcji baz danych ( jOOQ ), która obsługuje obie bazy danych. Nasze testy integracyjne obejmują wiele funkcjonalności, w tym wywoływanie procedur składowanych i funkcji, tablic, zagnieżdżonych selekcji itp. Wydaje mi się, że HSQLDB 2.1są nieco szybsze niż w H2 1.3przypadku małych baz danych, jeśli chodzi o DML.

Jednak HSQLDB znacznie przewyższa H2 w operacjach DDL, a także podczas uruchamiania / zamykania instancji, nawet w przypadku małej bazy danych (z powodu kompilowania przez H2 funkcji zapisanych na nowo za pomocą javaca przy każdym uruchomieniu bazy danych!) . Zależy to od sposobu przechowywania przechowywanych funkcji. Najwyraźniej jest to raczej „problem” specyficzny dla jOOQ, patrz także komentarz Thomasa Muellera.

Z drugiej strony, zgadzam się z user trashgod, powinieneś przetestować wydajność w rozsądnym schemacie i przypadku użycia dla siebie.

Lukas Eder
źródło
7
Przechowywane funkcje są ponownie kompilowane tylko wtedy, gdy są przechowywane „jako kod źródłowy”, co jest funkcją niedostępną w HSQLDB (o ile wiem). Jeśli używasz wstępnie skompilowanych funkcji przechowywanych, nie ma takiego narzutu.
Thomas Mueller
2
@ThomasMueller: Dzięki, nie wiedziałem tego. To znacznie przyspieszy moje testy integracji. Odpowiednio dostosuję swoją odpowiedź. HSQLDB ma podobny do PL / SQL język proceduralny, który jest potężniejszym IMO. Nie jestem jednak pewien, czy ten język jest wstępnie skompilowany lub zinterpretowany ...
Lukas Eder
45

Obie HyperSQLi H2 Databasesą dość przejrzyste, więc testowanie może być najlepszym podejściem do określenia, które jest bardziej odpowiednie do określonego zastosowania. Dostępne są porównania między jednym a drugim . Łączy ich wspólne dziedzictwo i oba są open source .

trashgod
źródło
10
„kosz na śmieci to ważne narzędzie projektowe” - loc. cit.
trashgod
3
Dzięki za ten link „dziedzictwo”. Całkiem wspaniale podsumowują historię. Najpierw pojawił się HSQLDB (Hypersonic SQL), a następnie H2, ale HSQLDB i H2 nie mają wspólnego kodu i na dzień dzisiejszy są oddzielnymi projektami.
specialk1st
1
@ specialk1st: Tak, dziedzictwo w tym przypadku jest wspólnym autorem, a nie wspólnym kodem.
trashgod