2016-04-25 5 views
2

Unsere Anwendung verwendet derzeit H2 als eingebettete Datenbank, und wir haben das folgende Szenario:Ist die H2-Datenbank als eingebettete Datenbank mit großen Tabellen geeignet?

  • Die H2 als „temporäre Datenbank“ verwendet wird. In H2 eingefügte Daten werden periodisch alle 30 Minuten von einer Anwendungsaufgabe an eine Oracle-Datenbank (die "offizielle") gesendet bzw. in diese eingefügt;

  • Diese "temporäre Tabelle" enthält durchschnittlich 183 Zeilen pro Stunde in einer einzelnen Tabelle.

  • Wir haben zwei andere große Tabellen (21 Millionen bzw. 1,5 Millionen Datensätze), die von der Hauptanwendungsaufgabe nur zum Abfragen verwendet werden. Es gibt eine weitere Anwendungsaufgabe, die diese Tabellen schrittweise von Oracle aktualisiert und in H2-Zeilen aktualisiert, die in Oracle seit der letzten Synchronisierung erstellt/aktualisiert/gelöscht wurden. Es passiert auch alle 30 Minuten.

Wir haben keine Probleme bisher für 1,5 Jahre H2 wurde mit, aber wir haben die folgende Warnung über H2 in Red Hat official documentation gefunden:

Es sollte jedoch nicht in einer Produktion verwendet werden Umgebung. Es handelt sich um eine sehr kleine, in sich geschlossene Datenquelle, die alle Standards unterstützt, die zum Testen und Erstellen von Anwendungen benötigt werden, aber für die Produktion nicht robust oder skalierbar genug ist.

Ist H2 so konzipiert und zuverlässig, dass es in Produktionsumgebungen in einem solchen Szenario verwendet werden kann?

Gibt es irgendwelche Benchmarks, die dies unterstützen? Die H2 official performance benchmark zeigt Ausführungszeiten und die Verwendung der Leistung, aber nichts über das Datenvolumen sagen.

Antwort

1

Ist die eingebettete H2-Datenbank im Speicher oder persistent? Mein wichtigstes Anliegen wäre Failover. Wenn Ihre JVM ausfällt, gehen alle Daten seit dem letzten Oracle-Synchronisierungspunkt verloren.

Darüber hinaus kann die eingebettete H2-Datenbank nur innerhalb derselben JVM wie Ihre Anwendung verwendet werden. Daher könnten Sie nicht auf eine Hochverfügbarkeitsarchitektur mit mehreren JVMs skalieren, jede JVM hätte ihre eigene H2-Datenbank und Sie könnten diese Daten nicht über JVMs gemeinsam nutzen.

Schließlich gibt es das Problem von Heap. Wenn Sie eine In-Memory-JVM verwenden, wird Ihr Heapspeicher größer, je größer die Datenmenge ist, und möglicherweise ist auch der RAM-Speicher erschöpft, was zu einem Überdruss führt, da der Garbage Collector versucht, Sie davon abzuhalten, den Heapspeicher zu verlassen.

Andere Grenzen finden Sie hier: http://www.h2database.com/html/advanced.html#limits_limitations

+0

Hallo, Dean. Danke für deine Antwort. Wir verwenden es als persistente Datenbank (Dateisystem). –

+0

Es ist also weniger ein Heap-Problem, aber Sie werden immer noch in ein Skalierungsproblem geraten, wenn Sie über eine einzelne JVM hinaus expandieren müssen, da sie keine gemeinsame eingebettete DB teilen können. Wenn dich keine der anderen Einschränkungen betrifft, würde ich sagen, dass ich vorsichtig vorgehen muss. –

+0

@DeanClark Wenn H2 im Speichermodus ausgeführt wird, teilt H2 JVM-Heap-Speicher für Datenspeicher? – manu

Verwandte Themen