Embedded Java Datenbanken
Geschrieben von: Markus Junginger in Java, tags: ACID, Apache, Datenbanken, Derby, Embedded DB, H2, Hibernate, HSQL, HSQLDB, Java DB, PerformanceEmbedded Datenbanken haben in manchen Projekten Vorteile gegenüber “echten” Datenbanken wie Oracle, MySQL und Co. Da sie direkt in die Anwendung eingebettet sind, entfällt eine Installation und Administration. Das macht sie insbesondere geeignet für Rich-Client Anwendungen. Aber auch ein Einsatz für kleine bis mittlere Server-Applikationen kann Sinn machen, wenn eine schlanke und pflegeleichte Lösung gefragt ist.
Im Java Bereich werden auch embedded Datenbanken über den Standard JDBC angesprochen. Damit hat man auch hier eine gewohnte Schnittstelle und zudem erleichtert es den Austausch des Datenbanksystems bei Bedarf. Dieser Beitrag beschränkt sich auf den relationalen Datenbanken. Objektorientierte Datenbanken wie beispielsweise db4o können auch eine Alternative sein. Insbesondere dann, wenn auf die Daten nur aus Java zugegriffen wird.
Apache Derby (Java DB), HSQLDB und H2 gelten als wichtigste embedded Java Datenbanken:
- Java DB und Apache Derby: Technisch handelt es sich um das selbe Produkt. Java DB wird von Sun supported und ist bei dem Java 6 SDK (nicht im JRE!) dabei. Die Binaries sind etwa 2 MB groß.
- HSQLDB: HSQLDB ist die Weiterentwicklung von Hypersonic SQL und wird unter anderem in OpenOffice eingesetzt. Die Binaries sind unter 700 KB.
- H2: H2 wurde vom Hypersonic SQL Autor komplett neu entwickelt. Laut der offiziellen Website ist H2 sehr performant und stellt nicht nur Derby und HSQLDB in den Schatten, sondern kann angeblich sogar mit MySQL mithalten (die Tests beziehen sich allerdings auf eine einzelne Datenbankverbindung). Die Binaries sind unter 1 MB groß.
Alle Kandidaten sind Open Source und die jeweiligen Lizenzbedingungen erlauben den Einsatz in kommerziellen Produkten. Der JDBC Support ist bei allen Produkten gut genug um von Hibernate unterstützt zu werden (H2 kam später dazu). Auch lassen sich alle Datenbanken über JNDI beispielsweise in Tomcat oder in einem J2EE/JEE Applikationsserver ansprechen. Zwar haben alle drei Systeme mehr oder weniger gute Mechanismen für die Verbesserung der Datenkonsistenz, aber die vollen ACID Eigenschaften verspricht derzeit kein System (lediglich Derby hat es in einer früheren Version behauptet). Es werden sowohl ein in-process als auch ein Client/Server Modus unterstützt.
Apache Derby/Java DB ist die erste Wahl wenn man sich eher konservativ entscheiden möchte. Das Datenbanksystem hat nicht nur die besondere Aufmerksamkeit von Sun hat, sondern auch die solideste und umfangreichste SQL Unterstützung. Da das System zuvor (unter dem Namen Cloudscape) zu IBM gehörte, überraschen die Ähnlichkeiten zu DB2 auch nicht. Interessanterweise leitet der Derby Dialekt von Hibernate auch direkt vom DB2 Dialekt ab. In der Konstellation Apache und Sun scheint die Weiterentwicklung auch erstmal gesichert.
H2 empfiehlt sich vor allem wenn es ein schlankeres und schnelleres Datenbanksystem sein soll. HSQLDB ist zwar noch etwas schlanker, aber dafür langsamer und hat noch andere Defizite. Insbesondere im Serverbetrieb ist die fehlende Isolation von Transaktionen problematisch (nur READ UNCOMMITTED). H2 dagegen unterstützt drei Isolationslevel (Derby unterstützt vier).
Zusammengefasst geht man mit Apache Derby (Java DB) auf Nummer Sicher, aber H2 ist die bessere Wahl wenn es primär um Performance geht.


Einträge (RSS)