MicroStream High-Speed Persistence jetzt Open Source

MicroStream ist im Kern eine von Grund auf neu entwickelte, hoch performante und ebenso hoch sichere Serialisierung für Java, mit einem darauf aufsetzendem Persistence-Framework für die persistente Speicherung beliebiger Java Objektgraphen (POJOs), die im schnellen Hauptspeicher gehalten werden. Das Ergebnis ist eine hoch performante In-Memory Datenbankanwendung oder ein Microservice mit eigener Persistence.

Das 2013 gestartete Projekt ist nun in Version 5 als Open Source unter der Eclipse Public License auf GitHub verfügbar. Mit MicroStream lassen sich beliebige Java Objekte (Plain-Old-Java-Objects), in der Praxis meist komplexe Objektgraphen bestehend aus Millionen von Objekten oder auch nur einzelne Subgraphen davon, persistent speichern und zu einem beliebigen Zeitpunkt ganz oder auch nur teilweise im Hauptspeicher wiederherstellen, z.B. nach einem Systemneustart. Anders als bei traditionellen Java Persistenz-Frameworks wie Hibernate in Verbindung mit relationalen Datenbanken oder bei NoSQL Systemen, werden Java Objekte mit MicroStream nicht mehr auf eine datenbankspezifische Datenstruktur abgebildet (Mapping), sondern serialisiert und direkt in Form von Bytecode persistent gespeichert. Umständliche Mappings, daraus resultierende technische Probleme, rechenzeitintensive Datenkonvertierungen und damit verbundene Latenzen zur Laufzeit fallen vollständig weg.

Im Gegensatz zu früheren Ansätzen hält MicroStream nicht den gesamten Objektgraphen im RAM, sondern lediglich die von der Anwendung gerade benötigten Objektreferenzen. Mit Hilfe von Lazy-Loading lassen sich beliebige Objektreferenzen bei Bedarf laden und anschließend falls sinnvoll gezielt wieder aus dem Hauptspeicher entfernen. Damit funktioniert das Konzept auch bei  sehr großen Datenmengen im Terabyte-Bereich bei gleichzeitig sehr viel geringerer RAM Kapazität von wenigen Gigabyte. Bei der Persistierung wird nicht jedes Mal der gesamte Objektgraph per Snapshot persistiert, sondern lediglich das Delta gespeichert, d.h. immer nur die Objekte oder Subgraphen die sich tatsächlich geändert haben. Die persistente Speicherung erfolgt nach einer Append-only Strategie, bei der die Objekte als BLOBs immer an die Storage hinten angehängt werden. Jeder Store ist eine atomare Operation. Ein Transaction-Log garantiert Transaktionssicherheit. Für die Beseitigung alter oder beschädigter Objektstände stellt MicroStream einen speziellen Garbage-Collector zur Verfügung. Auch für das Handling unterschiedlicher Objektversionen bietet die Engine ein ausgeklügeltes, sogenanntes Legacy-Type-Handling.

MicroStream ist eine recht kleine Java library, die sich via Maven einbinden lässt und zur Laufzeit im JVM-Prozess der Anwendung läuft. Der gesamte Code des Frameworks ist auf GitHub veröffentlicht. Neben Plain-File-Storage bietet MicroStream Datenbank-Konnektoren zu MariaDB, PostgreSQL und SQLite. Die Enterprise Edition bietet weitere Konnektoren für zahlreiche Enterprise-Datenbanken wie Oracle und Microsoft SQL-Server sowie Konnektoren für verschiedene Cloud-Blob-Stores, In-Memory-Datenbanken wie SAP HANA sowie für Event-Streaming Frameworks wie Kafka und Pulsar. Auch eine Update-Garantie für min. 8 Jahre wird durch die Enterprise Edition abgedeckt.

Markus Kett


Leave a Reply