Architektur Experte
CQRS — Trennung von Lesen und Schreiben¶
CQRSArchitekturPatterns 3 Min. Lesezeit
Command Query Responsibility Segregation für bessere Skalierbarkeit. Implementierung mit praktischen Beispielen.
Was ist CQRS?¶
CQRS trennt Schreiben (Command) von Lesen (Query). Lesen erfordert schnelle Abfragen über denormalisierte Daten, Schreiben erfordert Validierung und Konsistenz.
Beispiel¶
// Command — Schreiben
class OrderCommandHandler {
async createOrder(cmd) {
const order = new Order(cmd.customerId, cmd.items);
await this.orderRepo.save(order);
await this.eventBus.publish('OrderCreated', { orderId: order.id, total: order.total });
}
}
// Query — Lesen aus denormalisierter View
class OrderQueryHandler {
async getOrderSummary(orderId) {
return this.readDb.query('SELECT * FROM order_views WHERE id = $1', [orderId]);
}
}
Wann verwenden¶
- Ja: Hohes Lese- vs. Schreibverhältnis (90:10)
- Ja: Komplexe Abfragen über mehrere Aggregate
- Nein: Einfaches CRUD
- Nein: Starke Konsistenz ist kritisch
Zusammenfassung¶
CQRS ist mächtig, erhöht aber die Komplexität. Verwenden Sie es dort, wo Lese- und Schreibanforderungen deutlich unterschiedlich sind.
Brauchen Sie Hilfe bei der Implementierung?¶
Unser Team hat Erfahrung mit dem Entwurf und der Implementierung moderner Architekturen. Wir helfen Ihnen gerne.