Oracle, IBM, HSQLDB, SQLite

In-Memory-Datenbanken im Vergleich

27.01.2014
Von Roland Stirnimann und Jan Ott

So funktioniert In Memory

Beim Studium der Dokumentationen zeigt sich, dass sämtliche In-Memory-Datenbanken im Grunde auf ähnlichen Prinzipien basieren. Vor allem bei komplexeren Produkten wie TimesTen oder SolidDB sind viele Gemeinsamkeiten festzustellen.

  1. Datenhaltung: Beim Starten der Datenbank lädt das System den gesamten Datenbestand von der Festplatte in den Speicher, damit bei laufendem Betrieb keine Daten nachgeladen werden müssen.

  2. Checkpoint Files/Snapshot Images: Geänderte Daten werden in regelmäßigen Abständen mit dem persistenten Speicher (Festplatte) abgeglichen.

  3. Transaction Logs: Zwischen den einzelnen Checkpoint-Vorgängen werden laufende Änderungen in Transaction Logs geschrieben, um nach einem Crash ein Rollforward machen zu können.

  4. AKID-Prinzip: Wie herkömmliche RDBMS können auch In-Memory-Datenbanken sämtliche Daten nach dem AKID-Prinzip (Atomarität, Konsistenz, Isoliertheit und Dauerhaftigkeit) verarbeiten.

  5. Hochverfügbarkeit: In-Memory-Produkte wie IBM SolidDB oder Oracle TimesTen bieten Hochverfügbarkeit in Form von Datenbankreplikation an. Bei einem unerwarteten Crash kann ein Failover auf die verbleibende Instanz erfolgen.

  6. Direct Connect: Die Applikation hat die Möglichkeit, die In-Memory-Datenbank direkt in ihren eigenen Adressbereich zu laden, um jeglichen Overhead - wie etwa sämtliche Netzprozesse - zu vermeiden.

Der größte Unterschied zwischen einem Disk-basierenden und einem In-Memory-System besteht in der Datenhaltung. Ein Disk-basiertes RDBMS lädt erst bei Bedarf die erforderlichen "Data Pages" von der Disk in den "Buffer Pool" nach, während etwa TimesTen beim Starten der Datenbank alle Daten aus dem Checkpoint-File in den Speicher liest. Dadurch vereinfachen sich die Zugriffsalgorithmen bei In-Memory-Systemen entscheidend, was in der Praxis zu einer besseren Anwendungs-Performance führt. Der "Query Optimizer" von TimesTen kann zudem direkt auf alle Daten im Hauptspeicher zugreifen, ohne zusätzlichen I/O-Traffic zu erzeugen.