Java Embedded Databases Vergleich [geschlossen]

99

Ich beabsichtige, eine kleine (Java) Anwendung zur Verwaltung meiner Finanzen zu entwickeln. Ich glaube, ich muss eine eingebettete Datenbank verwenden, habe aber keine Erfahrung mit diesem Problem. Ich habe versucht, mir einige der verfügbaren Produkte anzusehen , kann mich aber nicht entscheiden, welches für mich besser geeignet ist. H2 , HSQLDB , Derby und Berkeley DB scheinen gute Kandidaten zu sein, aber ich sehe immer noch nicht, wie sie miteinander verglichen werden. Ich freue mich über Ihre Hilfe beim Vergleich und bei der Entscheidung, welche ich verwenden soll.

Ich beabsichtige, Hibernate für meine Anwendung zu verwenden (es sei denn, Sie würden die Verwendung der von DBMS bereitgestellten API empfehlen), möchte aber auch die Möglichkeit haben, die Datenbank einfach mit einem SQL-Browsing-Tool zu bearbeiten (Schema ändern und Daten ändern).

Danke dir.

Hosam Aly
quelle
Ohne zu wissen, was Sie versuchen, ist es nicht möglich, diese Frage zu beantworten. Ich schlage vor, die Frage mit Informationen über die Größe Ihres Projekts, wie viele Tabellen Sie denken, wie viele Datensätze usw. zu aktualisieren.
Outlaw Programmer
3
Mögliches Duplikat der eingebetteten Java-Datenbanken
Hosam Aly
5
Es ist ärgerlich, dass solche guten Fragen von den Nazis geschlossen werden. Sicher, einige vage Fragen sind nicht geeignet, aber diese ist es mit Sicherheit. Wo "Geeignet" bedeutet, nützlich für die Gemeinschaft, anstatt durch einige legalistische Definitionen.
Tuntable

Antworten:

59

Entweder

  • HSQLDB - Wird von OpenOffice verwendet, getestet und stabil. Es ist einfach zu bedienen. Wenn Sie Ihre Datenbankdaten bearbeiten möchten, können Sie einfach die Datei öffnen und die Einfügeanweisungen bearbeiten.

oder

  • H2 - Angeblich schneller (vom Entwickler, der ursprünglich auch hsqldb entworfen hat)

Welche Sie verwenden, hängt von Ihnen ab, je nachdem, wie viel Leistung und wie viel Stabilität Sie benötigen.

Der Entwickler von H2 hat eine schöne Leistungsbewertung erstellt:
http://www.h2database.com/html/performance.html

Sven Lilienthal
quelle
35

Ich verwende Apache Derby für so ziemlich alle meine Anforderungen an eingebettete Datenbanken. Sie können auch die Java-Datenbank von Sun verwenden, die auf Derby basiert, aber die neueste Version von Derby ist viel neuer. Es unterstützt viele Optionen, die von kommerziellen nativen Datenbanken unterstützt werden, ist jedoch viel kleiner und einfacher einzubetten. Ich hatte einige Datenbanktabellen mit mehr als einer Million Datensätzen ohne Probleme.

Ich habe vor ungefähr 3 Jahren HSQLDB und Hypersonic verwendet. Es hat zu der Zeit einige große Leistungsprobleme und ich wechsle aufgrund dieser Probleme von dort zu Derby. Derby war solide, selbst als es im Inkubator bei Apache war.

Chris Dail
quelle
Derby wäre großartig, wenn es nicht so viele Fehler gäbe und das letzte Update vor einigen Jahren war.
Hooli
2
@Hooli Ich kann die Fehler nicht bestätigen, aber "... das letzte Update war vor einigen Jahren" ist falsch. Bezogen auf den Zeitpunkt, zu dem Sie Ihren Kommentar veröffentlicht haben ( August 2016 ): Es gab eine Veröffentlichung weniger als ein Jahr zuvor ( Oktober 2015 ), eine Veröffentlichung zwei Monate später ( Oktober 2016 ) und eine Veröffentlichung etwas mehr als ein Jahr danach ( Oktober 2017 - Neueste) ).
Slaw
Aktualisieren dieses Kommentars, falls jemand anderes bei einer Suche auf dieses Thema stößt. Die letzte Veröffentlichung von Derby war im März / 2019. Hier ist ihre Website-Info: db.apache.org/derby
JavaJd
@Chris Dail Haben Sie Derby für Millionen Datensätze als normale Datenbank oder im Speicher oder für Caching verwendet?
Shreyans Jain
29

Ich musste in einem meiner Projekte eine eingebettete Java-Datenbank verwenden und habe viel recherchiert, um die Vor- und Nachteile jeder Datenbank zu verstehen. Ich habe einen Blog geschrieben, in dem die Vor- und Nachteile beliebter eingebetteter Java-Datenbanken (H2, HSQLDB, Derby, ObjectDB, Neo4j, OrientDB) aufgelistet sind. Sie können sich das ansehen. Ich habe mich für H2 entschieden, da ich dachte, dass es meinen Anforderungen am besten entspricht. Link zum Blog: http://sayrohan.blogspot.in/2012/12/choosing-light-weight-java-database.html Hoffe, es hilft!

Rohan Karwa
quelle
14

HSQLDB ist ein guter Kandidat (die Tatsache, dass es in OpenOffice verwendet wird, mag einige von Ihnen überzeugen), aber warum sollte man für eine so kleine persönliche Anwendung nicht eine Objektdatenbank (anstelle einer klassischen Beziehungsdatenbank) verwenden?

Ich habe DB4O verwendet in einem meiner Projekte verwendet und bin sehr zufrieden damit. Da Sie objektorientiert sind, benötigen Sie nicht die gesamte Ebene für den Ruhezustand und können Objekte direkt einfügen / aktualisieren / löschen / abfragen! Außerdem müssen Sie sich keine Gedanken über das Schema machen, Sie arbeiten direkt mit den Objekten und DB4O erledigt den Rest!

Ich bin damit einverstanden, dass es einige Zeit dauern kann, bis Sie sich an diesen neuen Datenbanktyp gewöhnt haben , aber lesen Sie das DB40-Lernprogramm , wie einfach die Arbeit mit der !

BEARBEITEN: Wie in den Kommentaren erwähnt, behandelt DB4O automatisch die neueren Versionen der Klassen. Darüber hinaus steht hier ein Tool zum Durchsuchen und Aktualisieren der Datenbank außerhalb der Anwendung zur Verfügung: http://code.google.com/p/db4o-om/

Wookai
quelle
2
Vielen Dank. DB4O sieht für ein so kleines Projekt gut aus, aber ich glaube, dass die Möglichkeit, Daten außerhalb der Anwendung zu durchsuchen und zu bearbeiten, sehr wichtig ist. Wäre es auch einfach, mit neueren Versionen von Klassen umzugehen? (zB hinzugefügte / entfernte Felder)
Hosam Aly
Wie in meiner Bearbeitung erwähnt, gibt es ein Tool zum Durchsuchen und Bearbeiten der Datenbank außerhalb der Anwendung. Und wie Fabian sagte, werden die neueren Versionen der Klassen automatisch behandelt.
Wookai
Danke für das Update. Ein Browsing-Tool zu haben war mir sehr wichtig, also vielen Dank.
Hosam Aly
12

Java DB (Sun Verteilung von Apache Derby) jetzt Schiffe in JDK 6 ausgeliefert!

Ich wollte so etwas wie Jason Cohen machen und habe gedacht, dass dies der einfachste Weg ist, in der JDK-Distribution zu sein (was von letzter Woche jetzt eine Voraussetzung für meine App ist). Oder vielleicht bin ich nur so faul.

Stu Thompson
quelle
Du hast wahrscheinlich Recht! Wir müssen auch unter Java 1.5 laufen, daher ist dies für uns keine Option.
Jason Cohen
... Ich meinte, Sie hatten Recht damit, dass es der einfachste Weg ist, nicht richtig damit, faul zu sein. :-P
Jason Cohen
Java DB wird nur mit den Sun / Oracle-Implementierungen des JDK ausgeliefert. Kein Standardteil von Java.
Basil Bourque
7

Wir verwenden HSQLDB in der Produktion als Option ohne Konfiguration für unsere Anwendung. Es ermöglicht Benutzern das Testen ohne den Aufwand, eine echte Datenbank einzurichten.

Wir unterstützen es jedoch nicht für den normalen Gebrauch. Die Gründe sind mehrere:

  1. Verlangsamt sich proportional zur Größe der Daten.
  2. Außerhalb unserer App schwer zugänglich (z. B. für benutzerdefinierte Berichte).
  3. Transaktionen / Festplattensynchronisierung sind schwierig durchzuführen, sodass Daten leicht verloren gehen können.

Für mindestens (2) und (3) gibt es Wege, aber es ist schwierig; Es ist viel einfacher, zB MySQL zu installieren.

Jason Cohen
quelle
7

neo4j ist:

Eine eingebettete, festplattenbasierte, vollständig transaktionale Java-Persistenz-Engine, die Daten speichert, die in Diagrammen und nicht in Tabellen strukturiert sind

Ich hatte noch keine Gelegenheit, es zu versuchen - aber es sieht sehr vielversprechend aus. Beachten Sie, dass dies keine SQL-Datenbank ist. Ihr Objektdiagramm bleibt für Sie erhalten. Daher ist es möglicherweise nicht für Ihre vorhandene App geeignet.

devstopfix
quelle
5

Die meisten Dinge wurden bereits gesagt, aber ich kann nur hinzufügen, dass ich HSQL, Derby und Berkely DB in einigen meiner Lieblingsprojekte verwendet habe und sie alle gut funktioniert haben. Um ehrlich zu sein, denke ich nicht, dass es wirklich wichtig ist. Eine erwähnenswerte Sache ist, dass HSQL sich selbst als Textdatei mit SQL-Anweisungen speichert, was ziemlich gut ist. Erleichtert das Entwickeln von Tests und das schnelle Einrichten von Daten. Kann bei Bedarf auch schnell bearbeitet werden. Vermutlich können Sie all das problemlos in jede Datenbank übertragen, falls Sie dies jemals ändern müssen :)

willcodejavaforfood
quelle
5

HSQLDB kann bei großen Anwendungen Probleme verursachen, es ist nicht ganz so stabil.

Das Beste, was ich gehört habe (jedoch keine Erfahrung aus erster Hand), ist berkleyDB. Wenn Sie es nicht öffnen, kostet die Verwendung aufgrund der Lizenzierung einen Arm und ein Bein ... siehe http://www.oracle.com/technology/software/products/berkeley-db/htdocs/licensing.html für Details.

ps. berkleyDB ist keine relationale Datenbank, falls Sie es nicht wussten.

Chii
quelle
Oh, ich wusste nicht, dass Berkeley keine relationale Datenbank ist! Vielen Dank!
Hosam Aly
bedeutet nicht, dass es nicht gut ist. aber ich vermute, es ist wahrscheinlich zu gut für Ihren Gebrauch, wenn man bedenkt, dass es für etwas Persönliches ist. Schauen Sie sich auch SQLite an. Ich denke, es hat Java-Bindungen, aber ich kann es nicht finden atm.
Chii
4

Ich bin ein großer Fan von DB4O für .Net und Java .

Die Leistung ist seit den frühen Veröffentlichungen viel besser geworden. Das Lizenzmodell ist auch nicht schlecht. Mir gefallen besonders die Optionen zum Abfragen Ihrer Objekte. Abfragen anhand von Beispielen sind sehr leistungsfähig und leicht zu gewöhnen.

Kilhoffer
quelle
4

Nach welchen Kriterien bewerten Sie diese? Wenn Sie es noch nicht wissen, müssen Sie sich jetzt nicht entscheiden. Versuchen Sie, Ihre Anwendung so datenbankimplementierungsunabhängig wie möglich zu gestalten - stellen Sie die entsprechenden Wrapper, Datenzugriffsobjekte usw. bereit und treffen Sie diese Entscheidung, wenn Sie alle Fakten zur Hand haben und sich entscheiden müssen.

Wenn Sie relationale Datenbanken und SQL verwenden, sollte das oben Genannte nicht zu schwierig sein (mit JDBC usw.). Stellen Sie sicher, dass Sie über zahlreiche Umgebungstests verfügen, damit Sie beim Wechseln zwischen Datenbanken feststellen können, dass die Funktionalität Ihrer Anwendung gleich bleibt.

Ich bin vor einiger Zeit auf dasselbe Problem gestoßen. Ich wusste nicht, für welche Datenbank ich mich entscheiden sollte, daher verwendete meine erste Lösung Derby (oder HSQLDB?), Und ich konnte später zu HSQLDB (oder Derby? Kann mich nicht erinnern, welche Lösung funktionierte) wechseln, nachdem ich festgestellt hatte, wo Ich hatte Probleme (in Bezug auf die Leistung) und welche Lösung für mich wirklich funktionieren würde.

Brian Agnew
quelle
3

Ich habe Derby verwendet und ich hasse es wirklich, dass es Datentypkonvertierungsfunktionen gibt, insbesondere Datums- / Zeitfunktionen. (Zahlentyp) <--> Varchar-Konvertierung ist ein Schmerz.

Wenn Sie also planen, Datentypkonvertierungen in Ihren DB-Anweisungen zu verwenden, sollten Sie die Verwendung der eingebetteten DB in Betracht ziehen. Ich lerne dies zu spät.

Neueste Datentypkonvertierungen der Derby-Version

Telcontar
quelle
3

Ich persönlich bevorzuge HSQLDB, aber hauptsächlich, weil es das erste Mal war, dass ich es versuchte.

H2 soll schneller sein und ein besseres GUI-Frontend bieten (das generisch ist und übrigens mit jedem JDBC-Treiber funktioniert).

Zumindest HSQLDB, H2 und Derby bieten Servermodi, die sich hervorragend für die Entwicklung eignen, da Sie mit Ihrer Anwendung und einem Tool gleichzeitig auf die Datenbank zugreifen können (was im eingebetteten Modus normalerweise nicht möglich ist).

Joachim Sauer
quelle
3

Ich denke, ich bin etwas spät dran (viel spät ;-)), aber ich möchte Prest hinzufügen, eine Open Source, objektorientierte eingebettete Datenbank für Java & .NET. für Ihre Überlegung. Prest ist eine eingebettete Open Source / Dual License-Datenbank für Java. Die Distribution ist mit der Android-Plattform von Google kompatibel und enthält auch Prest Lite für Java ME. Wir haben sogar einen Android-Benchmark erstellt und ein Whitepaper zu diesem Thema erstellt. Sie können hier einen Blick darauf werfen: http://www.mcobject.com/index.cfm?fuseaction=download&pageid=581§ionid=133

Alles Gute, Chris


quelle
3

Wenn ich richtig liege, stammt H2 von denselben Leuten, die HSQLDB geschrieben haben. Es ist viel besser, wenn Sie den Benchmarks auf ihrer Website vertrauen. Es gibt auch eine Vorstellung, dass die Sonnengemeinschaft zu schnell in Derby gesprungen ist.

smartnut007
quelle
2
Worum geht es bei DerbyDB bei vorzeitigen Derby-Vorstellungen? Reife?
Simgineer
2

Mir ist klar, dass Sie SQL-Browsing erwähnt haben, aber alles andere in Ihrer Frage lässt mich vorschlagen, dass Sie auch DB4O in Betracht ziehen , eine großartige, einfache Objekt-DB .

Fabian Steeg
quelle
Vielen Dank. DB4O sieht für ein so kleines Projekt gut aus, aber ich glaube, dass die Möglichkeit, Daten außerhalb der Anwendung zu durchsuchen und zu bearbeiten, sehr wichtig ist. Wäre es auch einfach, mit neueren Versionen von Klassen umzugehen? (zB hinzugefügte / entfernte Felder)
Hosam Aly
Ja, es werden einige Refactorings automatisch unterstützt. Weitere Informationen
Fabian Steeg