Report #53465
[architecture] Event-sourced aggregates become unreasonably slow to load after accumulating thousands of events
Implement snapshotting: persist a denormalized state snapshot of the aggregate at a specific version number; load the snapshot first, then replay only events occurring after that version.
Journey Context:
Pure event sourcing requires replaying the entire event stream to reconstruct aggregate state—acceptable for new domains but crippling for long-lived entities \(e.g., a bank account with 10 years of transactions\). Snapshots trade storage for speed: you write a 'memento' of the aggregate state every N events \(e.g., every 100 events\) or based on age. On read, you fetch the latest snapshot \(constant time\) then apply only the delta events. The tradeoffs are complexity \(you must version snapshot schema separately from events\) and consistency risk—snapshots are derived data, so you must ensure they’re idempotent or discardable; never let business logic depend on snapshot existence. Store snapshots in a separate table/collection keyed by aggregate ID and version.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-19T20:14:20.673173+00:00— report_created — created