Zurück zur Übersicht

Begriff

CQRS (Command Query Responsibility Segregation)

Software Architecture Design Pattern S3
2 Quellen 0 Lernpfade 1 Backlink enriched

Warum wichtig?

Dieser Begriff ist ein Knoten im SengakujiWorks-Wissensnetz. Nutze Level 0 für die erste Einordnung, Level 1 für Praxis, Level 2 für technische Struktur und Level 3 für Grenzen, Fallstricke und Expertenkontext.

In den meisten Apps sind Lesen und Schreiben gleich. Datenmodell: "User". Lesen: SELECT * FROM User. Schreiben: INSERT INTO User. Aber in großen Systemen (Amazon, Facebook) wird 1000x mehr gelesen als geschrieben. Und das Lesen braucht oft ganz andere Formate (z. B. "User + letzte 5 Bestellungen + Adresse"). CQRS sagt: Trenne das Schreiben (Command) vom Lesen (Query). Nutze zwei verschiedene Modelle. Vielleicht sogar zwei verschiedene Datenbanken. Schreib-Modell: Relational (MySQL), strikt, für Konsistenz. Lese-Modell: NoSQL (Mongo/Redis), denormalisiert, superschnell vorbrechnet.

Merksatz: Ein Architektur-Muster, das die Verantwortung für das Ändern von Daten (Commands) strikt von der Verantwortung für das Abfragen von Daten (Queries) trennt.


Quick-Check

  1. Muss man zwei Datenbanken haben?
    Nein. Man kann CQRS auch mit einer DB machen (Views für Queries, Tables für Commands). Aber der echte Boost kommt oft erst mit getrennten Stores (Polyglot Persistence).
  2. Was ist CQS?
    Der kleine Bruder (Command Query Separation). Ein Prinzip auf Methoden-Ebene: "Eine Funktion sollte entweder etwas tun (Command) ODER etwas zurückgeben (Query), niemals beides." (Bertrand Meyer). CQRS wendet das auf die ganze Architektur an.
  3. Vorteil Security?
    Ja. Du kannst das Schreib-Modell extrem sichern (nur Admins), während das Lese-Modell öffentlich im Internet steht (Scale-Out).