Data Projection (Read Models)
Einleitung
Data Projections erzeugen aus Transaktionsdaten oder Ereignissen leseoptimierte Sichten.
Sie entkoppeln:
- das konsistenzfokussierte Write-Modell
- von den performance- und UX-getriebenen Query-Anforderungen
Projections sind zentral in CQRS-Architekturen –
aber auch unabhängig davon ein wichtiges Skalierungs- und Modellierungsinstrument.
Einordnung
Data Projection ist ein Meso-Pattern für query-seitige Optimierung.
Es gehört zur:
- Lese-Ebene eines Systems
- Performance-Optimierung
- UX-Optimierung
- Reporting-Architektur
Es ist kein vollständiger Architekturstil, sondern ein Baustein.
Grundprinzip
Kernaussage:
- Writes optimieren Konsistenz
- Projections optimieren Abfrage
- Synchronisation ist meist asynchron
Charakteristika
1️⃣ Use-Case-spezifische Read Models
Ein Projection-Modell ist:
- nicht generisch
- nicht normalisiert
- nicht „schön“ im DDD-Sinne
Es ist optimiert für:
- konkrete Screens
- Reports
- APIs
- Suchanfragen
2️⃣ Denormalisierung ist erlaubt
Projections dürfen:
- redundante Daten enthalten
- vorberechnete Aggregationen speichern
- flache Strukturen nutzen
Performance schlägt Modellreinheit.
3️⃣ Asynchrone Aktualisierung
Typisch über:
- Domain Events
- Outbox Pattern
- Change Data Capture (CDC)
- Streaming (Kafka, Pulsar etc.)
Das führt meist zu:
eventual consistency.
4️⃣ Rebuild-Fähigkeit
Eine Projection sollte:
- neu berechenbar sein
- versionierbar sein
- isoliert deploybar sein
Rebuild ist kein Sonderfall – es ist Teil des Designs.
Varianten
🟢 Synchronous Projection
- Aktualisierung innerhalb derselben Transaktion
- Keine Eventual Consistency
- Geringere Komplexität
🟡 Asynchronous Projection
- Event-getrieben
- Höhere Skalierbarkeit
- Eventual Consistency
🔵 Streaming-basierte Projection
- Kontinuierliche Verarbeitung
- Near-Real-Time Updates
- Hohe Infrastruktur-Anforderungen
Vorteile
- Sehr hohe Query-Performance
- Geringe Latenz für UI
- Entkopplung von Write-Komplexität
- Skalierbare Read-Seite
- Gute Reporting-Fähigkeit
Risiken / typische Fallstricke
1️⃣ Eventual Consistency nicht erklärt
Fachbereiche müssen verstehen:
- Daten sind nicht sofort konsistent.
2️⃣ Leise Inkonsistenzen
Fehler in Projection-Logik erzeugen:
- stille Datenfehler
- schwer erkennbare Drift
Monitoring ist Pflicht.
3️⃣ Rebuild-Kosten
Große Event-Historien:
- machen Reprocessing teuer
- benötigen Partitionierung oder Snapshots
4️⃣ Verwechslung mit Cache
Eine Projection ist:
- dauerhaft
- fachlich relevant
- rebuildbar
Ein Cache ist:
- temporär
- performance-getrieben
- ersetzbar
Wann sinnvoll?
- Viele unterschiedliche Query-Use-Cases
- Read-Last dominiert
- Komplexe Write-Logik
- Reporting- oder Analytics-Bedarf
Wann unnötig?
- Wenige, einfache Abfragen
- Strikte sofortige Konsistenz erforderlich
- Geringe Last
Strategische Perspektive
Data Projections sind:
- ein Skalierungsinstrument
- ein UX-Optimierungsinstrument
- ein Entkopplungsmechanismus
Sie verschieben Komplexität von:
„komplexe Abfragen im Write-Store“
zu:
„kontrollierte Modell-Duplizierung im Read-Store“.
Fazit
Data Projection trennt:
- Konsistenzlogik
- von Abfrageoptimierung
Sie ist besonders wertvoll in:
- CQRS
- Event-getriebenen Systemen
- Reporting-intensiven Plattformen
Sie ist kein Muss – aber ein sehr starkes Werkzeug bei wachsenden Systemen.