Command side

Handles state changes. Validates + emits events. Events go to append-only store. Never updates existing rows.

Advertisement

Command side

Handles state changes. Validates + emits events. Events go to append-only store. Never updates existing rows.

Advertisement

Event store

Immutable log of every event. Full history preserved. Time travel + audit are free.

Read side

Materialized views built from events. Denormalized for query needs. Multiple views per event stream.

Projector

Reads events + updates read models. Idempotent — same event twice must be safe. Can rebuild views by replaying from event log.

Eventual consistency

Read side lags write side. Users may not see their write immediately. Handle in UX — 'processing...' message.