【发布时间】:2018-06-15 10:42:41
【问题描述】:
理论上,当使用事件溯源时,您不会存储“状态”而是存储事件。但是我在许多实现中看到,您将状态快照以 JSON 或 BLOB 之类的格式存储在列中。例如:
Using an RDBMS as event sourcing storage
事件表具有存储整个对象的数据列。对我来说,这就像在某个事件发生时存储特定时间的状态。
还有这张照片(取自 Streamstone):
它具有具有序列化状态的数据列。所以它也存储状态但在事件中?
那么如何从初始状态重播,如果我可以简单地选择一些事件并访问数据以直接获取状态。
Data里面到底存储了什么,是整个对象的状态还是序列化的事件?
假设我有一个人对象(在 C# 中)
public class Person
{
public string Name { get; set }
public int Age { get; set; }
}
当我创建一个人或更改姓名或年龄等属性时,我的事件应该存储什么。
当我创建一个 Person 时,我很可能会发送带有初始状态的 PersonCreatedEvent 之类的东西,因此是整个对象。
但是,如果我更改姓名或年龄,它们应该是 2 个单独的事件还是只有 1 个? PersonChangedEvent 或 PersonChangedAgeEvent 和 PersonChangedNameEvent?
在这种情况下应该在事件中存储什么?
【问题讨论】:
-
我希望您知道以任何形式存储
Age都是一个坏主意。这保证每年至少需要更换一次。出生日期应该只需要因错误而更改,并且可以轻松地推算年龄。
标签: event-sourcing