我是否需要在 Event Sourcing 中将对象的最后状态存储在单独的 table 中

Do I need to store last state of object in separate table in Event Sourcing

我仍在学习事件溯源,我不明白某些事情。 当我收到更改对象的命令时,我是否首先从事件存储中重新创建该对象而不是更改它并保存事件,或者我应该有单独的 table 来保存最后的状态? 这里的练习是什么?

I'm still learning event sourcing i don't understand something. When i get a command to change object, do I first recreate that object from event store than change it and save event, or should i have separate table that holds last state? What is practice here?

first rule of optimization:不要。

对于处理命令,您需要的所有信息都存储在您的事件历史记录中;只需加载历史记录并重新计算您需要的任何状态即可完成工作。


如果您的命令处理程序需要低延迟,并且从事件历史重新计算所需的状态太慢而无法满足您的服务水平目标,那么您可能会考虑保存“快照”,并且使用它来加速数据加载。

目前的共识是快照应该与事件历史分开保存(即:快照不是另一种事件),就好像快照是另一种“读取模型”一样。