Event Sourcing并不是存储状态,所有应用状态是代表事实的原始证据,它完全打开了我们应用的全新架构。
Why use Event Sourcing - Arkency Blog
有许多理由使用Event Sourcing,当你浏览Greg Young的系列文章和谈话你会发现下面要点:
1. 它不是一个新概念,真实世界中许多领域都很像它,看看你的银行账户状态,比如储蓄卡,它打印出一笔笔进出明细和当前余额,这一笔笔代表了领域事件。
2.通过重播事件,我们能够得到对象的任何时刻状态(这里应该用正确术语:聚合aggregate),比如储蓄卡每笔记录的当前余额代表你这个账户聚合对象的某刻时刻的状态,这可能会极大地帮助我们理解领域知识,当前状态是怎么来,因为什么改变?方便调试关键问题的错误。
3.领域中当前状态和存储数据库中的数据没有任何耦合,而传统上我们都是将应用状态存储到数据库中,比如储蓄卡当前余额100元存储到数据库中,现在我们存储导致余额的进出事件了,存款了多少钱,取款了多少钱,这一笔笔领域事件都会记录在数据库中。
4.Append-only追加模型存储这些事件,易于扩展,这样我们无论读写都有很好地性能,读取能够转为查询优化,也可以转为写优化(因为没有读,写得很快),读写分离。
5.除了可以存储用户意图数据,也就是操作事件,事件存储顺序能够用来分析用户正在做什么,通往大数据。
6.我们能避免了对象与关系数据库的不匹配。
7.审计日志是免费的,一次审计日志所有变化,因为没有状态改变,只有事件。
Greg Young说:这个星球上最烂的就是每个数据库,它们都以自己独特的方式自淫。
参考:Linked使用Apache Samza对数据库进行彻底的"调教"