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?


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.


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 .


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.