Apache Ignite ist eine Java-basierte NoSQL-Datenbank. Ähnlich wie Apache Cassandra ist auch Ignite ein Key-Value-Store. Allerdings fokussiert Ignite nicht darauf, eine reine Datenbanklösung zu realisieren; Ignite ist deutlich flexibler ausgelegt.
Das Memory Grid und Caches
Apache Ignite ist Memory-zentriert und benötigt damit beträchtlich Speicher. Damit scheint Ignite gerade ein Produkt darzustellen, für das Java nicht gemacht ist. Aber Ignite kann ja auch das Off-Heap-Memory benutzen, um nicht durch die Garbage Collection behindert zu werden. Der vom Ignite-Prozess benutzte Speicherplatz kann somit durchaus gewaltig sein, mehrere hundert Gigabyte sind nicht außergewöhnlich.
Dies ist aber noch nicht alles: Der effektiv verfügbare Gesamtspeicher wird nämlich durch das Memory Grid definiert. Das ist die Summe der Speicher aller Ignite-Knoten, die zu einem Grid vereinigt sind. Damit sind sehr einfach Memory-Größen erreichbar, die vor wenigen Jahren nicht einmal von einzelnen Festplatten realisiert werden konnten.
Das Grid wird wieder in einzelne Bereiche unterteilt, die dann die eigentliche Datenhaltung übernehmen. Dies sind die Caches. Jeder Cache kann hierbei konfiguriert werden, um den fachlichen Anforderungen zu entsprechen:
- Bei einem partitionierten Cache werden die Daten an Hand des Keys auf die verschiedenen Knoten verteilt. Optionale Backup-Knoten verhindern Datenverluste. Damit kann das Memory Grid besonders gut große Daten-Volumina halten.
- Bei einem replizierten Cache werden die Daten auf allen Knoten gleichzeitig vorgehalten. Damit können Abfragen auf und Analysen der Daten sehr gut parallelisiert werden.
- Daneben unterstützt Ignite verschiedene Modi beim Schreiben von Daten:
ATOMIC
undTRANSACTIONAL
. Ein transaktioneller Cache garantiert hierbei die Datenkonsistenz. Aus Sicht des CAP-Theorems ist ein solcher Cache ein CP-System, ATOMIC hingegen AP.
Cache-Persistenz
Um eine Ausfallsicherheit zu erreichen können die Caches persistiert werden. Dies erfolgt entweder
- Klassisch durch Ablage der Daten in einem Datenbank-System. Dazu wird der Cache entweder mit
READ/WRITE-THROUGH
oder mitWRITE-BEHIND
konfiguriert. Details hierzu liefert die Wikipedia. - Die Ignite Persistence schreibt ein Write Ahead Log im lokalen Dateisystem oder in einem Shared Directory. Damit hält der Ignite-Knoten seine Daten selbst und ist nicht auf ein Backend-System angewiesen.