Gibt es DBs für Java, die in einem Embedded-Modus ausgeführt werden können, wobei einige Tabellen im Arbeitsspeicher gespeichert werden, während andere vom Datenträger geladen werden? H2 und JavaDB scheinen die beiden Führer für Java-DBs zu sein, und ich weiß, dass sie beide einen In-Memory-Modus haben, aber laden sie die gesamte DB in den Speicher oder können Sie sich für jede Tabelle entscheiden?In-Memory-Java-DB
Antwort
Dies ist die im Cache gespeicherte Tabelle FAQ in HSQL Website erwähnt.
• Does HSQLDB speichert alle Daten im Speicher. Ist als Folge nicht genügend Speicherplatz aus?
• Es alle Daten im Speicher speichert nur, wenn Sie wollen. Sie Standard, CREATE TABLE-Ergebnisse in einer Speichertabelle, da dies der beste Typ für kleinere Tabellen ist. Verwenden Sie für größere Tabellen CREATE CACHED TABLE und passen Sie die Cachegröße an Ihre Speicheranforderungen an (so wenig wie 8 MB oder so). Weitere Informationen finden Sie im Kapitel Systemmanagement und Bereitstellungsprobleme im Handbuch. Es gibt keine einfache Regel und kein Ausschießen seitens der HSQLDB, da maximale Flexibilität mit nur ein paar Einstellungen erlaubt ist. Eine beliebte Verwendung von HSQLDB ist für OLAP-, ETL- und Data-Mining-Anwendungen, bei denen riesige Java-Speicherzuweisungen verwendet werden, um Millionen von Datenzeilen im Speicher zu halten.
Ich denke, Cache-Tabelle ist bereits stark genug, um Ihre Bedürfnisse zu erfüllen.
Von http://hsqldb.org/web/hsqlFAQ.html
Vergleich zwischen Cache-Tabelle und Speichertabelle
MEMORY-Tabellen und CACHED Tabellen werden für die Datenspeicherung verwendet. Der Unterschied zwischen den beiden ist folgender:
Die Daten für alle MEMORY-Tabellen werden aus der * .script-Datei gelesen, wenn die Datenbank gestartet und im Speicher abgelegt wird. Im Gegensatz dazu werden die Daten für zwischengespeicherte Tabellen erst dann in den Speicher gelesen, wenn auf die Tabelle zugegriffen wird. Darüber hinaus wird nur ein Teil der Daten für jede CACHED-Tabelle im Speicher gehalten, was Tabellen mit mehr Daten ermöglicht, als im Speicher gehalten werden können.
Wenn die Datenbank normal heruntergefahren wird, werden alle Daten für MEMORY-Tabellen auf den Datenträger geschrieben. Im Vergleich dazu werden die Daten in CACHED-Tabellen, die sich geändert haben, während des Betriebs und beim Herunterfahren ausgeschrieben.
Die Größe und Kapazität des Datencache für alle Cached-Tabellen ist konfigurierbar. Auf diese Weise können alle Daten in CACHED-Tabellen im Speicher zwischengespeichert werden. In diesem Fall ist die Zugriffsgeschwindigkeit gut, aber etwas langsamer als die MEMORY-Tabellen.
Für normale Anwendungen wird empfohlen, dass MEMORY-Tabellen für kleine Datenmengen verwendet werden und CACHED-Tabellen für große Datenmengen bleiben. Für spezielle Anwendungen, bei denen Geschwindigkeit im Vordergrund steht und eine große Menge an freiem Speicher verfügbar ist, können MEMORY-Tabellen auch für große Tabellen verwendet werden.
Es scheint, dass diese Funktion von H2 und Derby (JavaDB) noch nicht unterstützt wird. Korrigiere mich, wenn es nicht so ist.
Die meisten In-Memory-Datenbanken (wie HSQLDB Fähigkeit haben einige (oder alle) Daten auf der Festplatte zwischengespeichert wird. In der Regel ist es ausreichend niedriges Niveau, so dass es für den Programmierer transparent ist, aber sicherlich konfigurierbar ist
Gibt es Dokumente, auf die Sie mich hinweisen könnten? Von dem, was ich auf der H2-Seite sah, funktioniert In-Memory nur, wenn die DB nicht persistent ist. –
Vielleicht möchten Sie sich die Terracotta http://www.terracotta.org/ – Bostone
@DroidIn ansehen.Netz Terrakotta ist kommerziell? Und es ist eine Art Cache, nicht DB, oder? –