1

我拥有的网站有一个运行良好的简单 CQRS 架构。一个事件被不同的订阅者发布和接收,其中一个使报告数据库保持同步[在 RavenDb 中]。

例如,我的报告数据库已损坏/丢失。使用事件溯源,我可以重播事件并重建报告数据库,但是我 [当前] 不使用事件溯源;我有一个简单的 nHibernate 持久化到关系存储。解决方案是创建一个“重新生成”类型的脚本,该脚本基本上将基于关系存储发送所有事件(例如,PersonCreatedEvent 后跟 30xPersonLikedBlogPostEvent 等)?它本质上与事件源所做的事情相同,但事件是从关系模型中推断出来的。

可维护性和 DR 显然很重要。

4

4 回答 4

1

如果您存储了发送到服务器的所有命令(例如,在日志中),您可以从第一个命令到最后一个命令将所有命令发送到总线,并且您可以重现所有查询端。那就是命令采购。使用命令溯源,您可以在准备就绪时轻松进行事件溯源。

于 2015-01-03T14:21:13.820 回答
1

如果不存储事件,则无法进行再生。如果您使用关系存储仅生成“已创建”事件,您将无法从这种“重新生成”中获得任何好处。

于 2012-05-11T18:23:23.027 回答
0

您无需实施完整的事件溯源解决方案即可实现这一目标。如果您只是将所有事件存储在事件日志中,则可以根据需要检索和重播它们。

于 2012-05-05T11:14:01.297 回答
0

我认为没有一个简单/快速的解决方案。如果您要将数据从关系源迁移到事件源,这实际上是您需要做的。正如您所说,您唯一能做的就是为每个实体脚本以合理的顺序编写事件(即 CreatedEvent 然后是您的其他状态更改事件)。但是当您捕获这些事件时,我会将它们存储起来,以便您以后可以重新运行它们。

于 2012-05-28T08:18:35.683 回答