【问题标题】:persistence of the snapshot/memento pattern快照/备忘录模式的持久性
【发布时间】:2014-07-22 07:16:33
【问题描述】:

我了解聚合根通常会重播所有事件以使其处于正确状态。这可能会变得低效,因此人们建议使用备忘录模式来创建聚合根的快照。我的理解是域模型与持久性无关。我也认为快照与读取模型无关。有人可以这么好心并指出快照通常保存在哪里吗?谢谢。

【问题讨论】:

  • 我的答案已被删除,因此,按照建议,我将重复答案作为评论:持久性,包括在纪念品模式中持久化快照,是存储库的责任。几个开源事件溯源框架向您展示了如何做到这一点,例如 NEventStore 或 Axon。

标签: domain-driven-design cqrs memento


【解决方案1】:

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

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

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

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

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2013-12-01
    • 2012-07-09
    • 2011-03-16
    • 1970-01-01
    • 2021-01-22
    • 2013-12-20
    • 2011-05-02
    • 2021-11-01
    • 2017-06-28
    相关资源
    最近更新 更多