快照/纪念模式的持久性

时间:2014-06-02 08:12:17

标签: domain-driven-design cqrs memento

我知道聚合根通常会重放所有事件以使其处于正确的状态。这可能会变得低效,因此人们建议memento模式创建聚合根的快照。我的理解是域模型与持久性无关。我还认为快照与读取模型无关。有人可以这么善良,并指出快照通常持续存在的地方吗?感谢。

1 个答案:

答案 0 :(得分:1)

有很多方法可以做到这一点,具体取决于您用于存储活动的实现。

大多数抽象的事件存储库(那些使用不可知的持久性存储,例如MySQL,MongoDB,Redis等等)通常会自行完成。

如果您实施自己的机制,则可以提供快照服务以及快照策略。

例如,您可能希望为每个事件或每个 n 修订版创建快照。

另一种解决方案是让您的EventStore实现在您可以订阅的某些管上发布事件并异步构建快照。

您还可以运行计划任务以不时构建快照。

如果您使用EventStore持久性存储(内置事件存储),您可能不需要快照,并且您很可能会使用投影来构建事件流的计算状态。

作为一般建议,快照有缺点。 通过使用它,您将重用状态持久性而非一系列事件。 确保您确实需要它并且没有更好的解决方案来优化您的表现。

事件通常是小消息对象并且加载速度很快。