← 中文资源

简体中文版本

为事件溯源聚合添加快照

定期持久化快照,使重建聚合无需重放成千上万事件,并通过版本管理安全地使过期快照失效。

阅读英文原文

概述

事件溯源保留历史,却使加载成本随历史增长。快照把它变为“自快照以来的历史”,同时仍是可弃缓存。为快照加版本,让格式变化使陈旧状态失效而非损坏它。

关键步骤

  1. 每 N 个事件写入一次快照,保存序列化状态与最近事件位置。
  2. 加载时读最新快照,只重放其位置之后的事件。
  3. 对快照的 schema 做版本管理,丢弃版本过旧的快照。
  4. 保持快照可选:聚合始终可仅凭事件重建。

验证

  • 加载从最新快照开始。
  • 不用快照重放得到相同状态。
  • 过期快照版本会触发完整重建。
  • 快照永不领先于事件日志。

注意事项

  • 快照带来写放大与存储开销,只对长寿聚合划算。
  • 错误的快照会静默污染聚合,直到完整重建才能修正。

适用范围

本条目围绕「为事件溯源聚合添加快照」给出可复制的步骤、验证方式与常见问题,适合需要按此流程落地的工程团队。执行时请结合自身上下文调整命令与阈值,并在变更前后留存证据,便于后续复核与回滚。

SELECT state, position FROM snapshots
WHERE aggregate_id = $1
ORDER BY position DESC
LIMIT 1;