关于 event-store-design
为事件溯源应用提供事件存储设计指南,面向规划或实现事件存储的开发者。内容涵盖架构、技术选型、要求与实践建议,并提供详细模板和示例的引用路径。
主要功能
- 01事件存储架构与要求
- 02事件存储技术对比
- 03事件版本与幂等性建议
- 04模式设计和扩展指导
- 05详细模板与示例参考
适用场景
- 01为事件溯源系统选择存储技术
- 02设计事件流和存储模式
- 03优化事件写入与检索
- 04规划事件存储扩展
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ wshobson/ agents --skill event-store-design安装后在 Claude Code 中输入/event-store-design确认已加载。
附带文件references/details.md
详细介绍
事件存储设计
为事件溯源应用设计事件存储的全面指南。
何时使用本技能
- 设计事件溯源基础设施
- 在事件存储技术之间进行选择
- 实现自定义事件存储
- 优化事件存储与检索
- 设置事件存储 schema
- 规划事件存储的扩展
核心概念
1. 事件存储架构
┌─────────────────────────────────────────────────────┐
│ Event Store │
├─────────────────────────────────────────────────────┤
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Stream 1 │ │ Stream 2 │ │ Stream 3 │ │
│ │ (Aggregate) │ │ (Aggregate) │ │ (Aggregate) │ │
│ ├─────────────┤ ├─────────────┤ ├─────────────┤ │
│ │ Event 1 │ │ Event 1 │ │ Event 1 │ │
│ │ Event 2 │ │ Event 2 │ │ Event 2 │ │
│ │ Event 3 │ │ ... │ │ Event 3 │ │
│ │ ... │ │ │ │ Event 4 │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
├─────────────────────────────────────────────────────┤
│ Global Position: 1 → 2 → 3 → 4 → 5 → 6 → ... │
└─────────────────────────────────────────────────────┘
2. 事件存储需求
| 需求 | 描述 |
|---|---|
| 仅追加 | 事件不可变,只能追加 |
| 有序 | 按流排序和全局排序 |
| 带版本 | 乐观并发控制 |
| 订阅 | 实时事件通知 |
| 幂等 | 安全处理重复写入 |
技术对比
| 技术 | 最适合 | 局限 |
|---|---|---|
| EventStoreDB | 纯事件溯源 | 单一用途 |
| PostgreSQL | 现有 Postgres 技术栈 | 需要手动实现 |
| Kafka | 高吞吐流式处理 | 不适合按流查询 |
| DynamoDB | 无服务器、AWS 原生 | 查询限制 |
| Marten | .NET 生态 | .NET 专用 |
模板和详细示例
完整模板库和详细示例位于 references/details.md。需要具体模板时请阅读该文件。
最佳实践
推荐做法
- 使用包含聚合类型的事件流 ID -
Order-{uuid} - 包含关联/因果关系 ID - 用于追踪
- 从第一天起就对事件进行版本管理 - 为 schema 演进做好规划
- 实现幂等性 - 使用事件 ID 进行去重
- 适当建立索引 - 针对你的查询模式
避免做法
- 不要更新或删除事件 - 它们是不可变的事实
- 不要存储大负载 - 保持事件小巧
- 不要跳过乐观并发 - 防止数据损坏
- 不要忽视背压 - 处理缓慢的消费者
评论
支持 Markdown