概述
事件溯源保留历史,却使加载成本随历史增长。快照把它变为“自快照以来的历史”,同时仍是可弃缓存。为快照加版本,让格式变化使陈旧状态失效而非损坏它。
关键步骤
- 每 N 个事件写入一次快照,保存序列化状态与最近事件位置。
- 加载时读最新快照,只重放其位置之后的事件。
- 对快照的 schema 做版本管理,丢弃版本过旧的快照。
- 保持快照可选:聚合始终可仅凭事件重建。
验证
- 加载从最新快照开始。
- 不用快照重放得到相同状态。
- 过期快照版本会触发完整重建。
- 快照永不领先于事件日志。
注意事项
- 快照带来写放大与存储开销,只对长寿聚合划算。
- 错误的快照会静默污染聚合,直到完整重建才能修正。
适用范围
本条目围绕「为事件溯源聚合添加快照」给出可复制的步骤、验证方式与常见问题,适合需要按此流程落地的工程团队。执行时请结合自身上下文调整命令与阈值,并在变更前后留存证据,便于后续复核与回滚。
SELECT state, position FROM snapshots
WHERE aggregate_id = $1
ORDER BY position DESC
LIMIT 1;