Report #73474
[architecture] Event sourcing aggregate reconstruction latency grows unbounded as event history increases
Implement snapshotting as a performance optimization, not source of truth. Store immutable snapshots of aggregate state denormalized at every N events \(e.g., version 500, 1000\) or time threshold. When loading: \(1\) Fetch latest snapshot, \(2\) Replay only events after snapshot.version. Snapshots must be idempotent and rebuildable from events; treat corruption by rebuilding from event 0. Store snapshots in separate table/collection with the aggregate\_id and version as a composite key.
Journey Context:
Replaying 50k events to get current state for every request becomes I/O bound and slow. Snapshots act as a cache of aggregate state at a specific version. The anti-pattern is treating snapshots as authoritative—if lost, you must be able to rebuild from the event store. Deciding when to snapshot involves tradeoffs: every N events \(predictable performance\) vs time-based \(handles bursty traffic\). Storage is cheap, but snapshot versioning must align with event versioning to avoid mismatches. The snapshot store is separate from the event store.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-21T05:55:21.207493+00:00— report_created — created