Projection Patterns
Comprehensive guide to building projections and read models for event-sourced systems.
When to Use This Skill
- Building CQRS read models
- Creating materialized views from events
- Optimizing query performance
- Implementing real-time dashboards
- Building search indexes from events
- Aggregating data across streams
Core Concepts
1. Projection Architecture
āāāāāāāāāāāāāāā āāāāāāāāāāāāāāā āāāāāāāāāāāāāāā
ā Event Store āāāāāāŗā Projector āāāāāāŗā Read Model ā
ā ā ā ā ā (Database) ā
ā āāāāāāāāāāā ā ā āāāāāāāāāāā ā ā āāāāāāāāāāā ā
ā ā Events ā ā ā ā Handler ā ā ā ā Tables ā ā
ā āāāāāāāāāāā ā ā ā Logic ā ā ā ā Views ā ā
ā ā ā āāāāāāāāāāā ā ā ā Cache ā ā
āāāāāāāāāāāāāāā āāāāāāāāāāāāāāā āāāāāāāāāāāāāāā
2. Projection Types
| Type |
Description |
Use Case |
| Live |
Real-time from subscription |
Current state queries |
| Catchup |
Process historical events |
Rebuilding read models |
| Persistent |
Stores checkpoint |
Resume after restart |
| Inline |
Same transaction as write |
Strong consistency |
Templates and detailed worked examples
Full template library and detailed worked examples live in references/details.md. Read that file when you need the concrete templates.
Best Practices
Do's
- Make projections idempotent - Safe to replay
- Use transactions - For multi-table updates
- Store checkpoints - Resume after failures
- Monitor lag - Alert on projection delays
- Plan for rebuilds - Design for reconstruction
Don'ts
- Don't couple projections - Each is independent
- Don't skip error handling - Log and alert on failures
- Don't ignore ordering - Events must be processed in order
- Don't over-normalize - Denormalize for query patterns