Open Source-Datenbank Prevayler: eine In-Memory-Datenbank der anderen Art

Die schnellste Datenbank der Welt

Eberhard Wolff

Normalerweise denkt man bei Datenbanken an große Server mit gigantischen Festplatten. Was passiert, wenn man die Daten im RAM hält und regelmäßig serialisisert? Eigentlich müsste man dann doch viel schnelleren Zugriff auf die Daten erreichen können

Ziel des vor kurzem erschienenen Java Persistenz-Strategien-Buches [1] war es, verschiedene Ansätze für die Umsetzung der Persistenz für Java-Anwendungen darzustellen. Dabei wurde zwar der Schwerpunkt auf gängige Technologien wie JDO, JDBC oder CMP gelegt. Dennoch sollten auch alternative Technologien betrachtet werden. Eine interessante Technologie hat es allerdings aus zeitlichen Gründen nicht mehr in das Buch geschafft und soll im Mittelpunkt dieses Artikels stehen: Prevayler [2].Dieses Open Source-Projekt verfolgt schon längere Zeit einen recht interessanten Ansatz für die Persistenz von Objekten und steht gerade vor der Veröffentlichung der Version 2. Basis ist zunächst, den Inhalt des Speichers regelmäßig zu serialisieren. Dadurch ist die Größe der Datenbank natürlich auf die Speicherausstattung der JVM limitiert. Da diese jedoch im Gigabyte-Bereich liegt und RAM auch immer billiger wird, ist diese Einschränkung für viele Anwendungen verschmerzbar.Dennoch ist dies Vorgehen natürlich nicht ausreichend: Es gibt keine transaktionalen Sicherungen. Man kann also nicht definieren, dass bestimmte Aktionen zusammengehören und nur entweder ganz oder gar nicht ausgeführt werden. Ein typisches Beispiel für eine Transaktion ist eine Überweisung: Der Betrag soll von einem Konto abgebucht werden und auf ein anderes Konto aufaddiert werden. Im Fehlerfall soll nichts von beiden passieren, auf keinen Fall soll nur eine der Aktionen ausgeführt werden. Ernsthafte Persistenzlösungen müssen so etwas natürlich unterstützen, da es eines der wichtigsten Features von Datenbanken ist.Das andere Problem besteht darin, dass in einem ernsthaften Persistenzsystem der Zustand der persistenten Daten möglichst nie verloren gehen darf. Man müsste also nach jeder Änderung den Speicherinhalt serialisieren. Das führt natürlich zu nicht akzeptabler Performance.

Abb. 1: Das Prinzip von Prevayler ist, Transaktionen durch serialisierbare Command Objects zu implementieren. Diese werden zuerst in eine Datei serialisiert und dann auf die Objekte im Speicher angewendet. Dabei werden die Command Objects streng seriell ausgeführt.
Geschrieben von
Eberhard Wolff
Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.