基于事件溯源的业务逻辑开发与Saga模式的应用
1. 事件存储查询的挑战
在实际开发中,查询事件存储可能会面临挑战。例如,若要找出已耗尽信用额度的客户,由于事件存储中可能没有直接包含信用额度的列,无法简单地使用 SELECT * FROM CUSTOMER WHERE CREDIT_LIMIT = 0 这样的查询语句。相反,必须使用更复杂且可能效率低下的查询,其中可能包含嵌套的 SELECT 语句,通过折叠设置初始信用额度并进行调整的事件来计算信用额度。而且,如果使用基于 NoSQL 的事件存储,通常仅支持基于主键的查找,因此需要使用 CQRS 方法来实现查询。
2. 事件存储的实现方式
事件存储是一种结合了数据库和消息代理功能的存储方式。它既具备数据库通过主键插入和检索聚合事件的 API,又拥有消息代理用于订阅事件的 API。实现事件存储有以下几种方式:
- 自行实现 :可以将事件持久化到关系型数据库管理系统(RDBMS)中。一种简单但性能较低的发布事件方式是让订阅者轮询 EVENTS 表以获取事件。不过,确保订阅者按顺序处理所有事件是一个挑战。
- 使用专用事件存储 :这类存储通常提供丰富的功能以及更好的性能和可扩展性,常见的有:
- Event Store :由事件溯源先驱 Greg Young 开发的基于 .NET 的开源事件存储(https://eventstore.org)。
- Lagom
超级会员免费看
订阅专栏 解锁全文
564

被折叠的 条评论
为什么被折叠?



