📦 开源仓库:learn_event_sourcing · 纯 Python 标准库 · 学习演示项目
传统数据库总是存「当前状态」,改一次盖一次,历史就没了。事件溯源(Event Sourcing)反过来:只追加事件,从不 UPDATE;当前状态只是把事件从头回放一遍的产物。于是审计、时间旅行、重建任意历史时刻——全都免费获得。
核心思路
命令: 创建订单 → 扣余额 → 扣库存
│ │ │
▼ ▼ ▼
事件日志:OrderCreated BalanceDeducted StockDeducted (只追加)
│ │ │
└───────────┴──────────┘
▼
当前状态 = 回放全部事件
- 永远不 UPDATE,只 APPEND
- 状态是派生出来的——随时可以重放日志重建
- 读模型(如按用户的订单汇总)= 回放全部事件流聚合成任何你想要的形状
为什么值得学
- 审计 / 时间旅行:每个变更都是事件,任何时刻都能精确重建
- 不丢更新:事件是不可变事实,没有「盖写」这回事
- 读模型灵活:同一份日志可以回放出 N 种视图
- 天然配对 outbox / 事件总线:日志里的事件顺路就能发布下游
演示场景
- 生命周期即事件:创建订单、扣余额、扣库存,状态由回放得出
- 取消订单:追加
OrderCancelled,状态变 CANCELLED - 从日志重建:新实例回放事件得到完全相同的状态
- 读模型:回放全部事件流,构建按用户的订单汇总
运行
python run_all.py
纯 Python 标准库,零第三方依赖,一键跑完所有演示场景后自动退出。
仓库:github.com/yxpil/learn_event_sourcing,欢迎 Star 与提 Issue。