当有人说存储事件本身而不是状态/数据时,这意味着什么?

时间:2017-03-12 14:55:42

标签: event-sourcing

当有人说在期刊中存储事件本身而不是状态/数据时,这意味着什么?这样人们就可以重播事件来建立国家。有人可以解释日记中的数据是如何看起来的,因为没有状态存储?是否存储了函数本身?

1 个答案:

答案 0 :(得分:1)

这意味着您只保留状态中已更改的内容而不是所有状态。我会给你和榜样。

假设您有InventoryAggregate存储项目,例如Products。在内部,此Aggregate存储所有项目的列表,但是当添加项目X的命令到达(AddItemXCommand)时,它会生成项目x已添加的事件(ItemXWasAddedEvent)。下次类似的命令到达时,Aggregate RepositoryEvent Store(来自 Journal ,如果需要)加载所有先前生成的事件并逐个应用到state上聚合以构建状态(在此特定示例中,构建所有添加项的列表)。

因此,在命令到达并执行后,Aggregate更改(项目已添加到列表中)但您不会保留它(您不保留项目列表),您只保留生成的事件(添加了一个项目)。保留该事件后,您可以放弃state及其内部Snapshot

作为优化,您可以保留内部状态,因此当命令到达时,您不必加载+应用所有事件,只需缓存状态后生成的事件。特定时刻的这种状态称为_dl_runtime_resolve