Apache Ignite: Eine Übersicht

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 und TRANSACTIONAL. 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 mit WRITE-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.

Seminare zum Thema

Dr. Rainer Sawitzki / Dr. Rainer Sawitzki

Nach seinem Studium der Physik und anschließender Promotion Wechsel in die IT-Branche. Seit mehr als 20 Jahren als Entwickler, Berater und Projektleiter vorwiegend im Bereich Java und JavaScript unterwegs. Parallel dazu in der Entwicklung und Durchführung von hochwertigen Seminaren für die Integrata im Einsatz.

Schreibe einen Kommentar