重新生成查询数据库

时间:2012-05-04 14:27:27

标签: architecture cqrs maintainability event-sourcing

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

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

由于可维护性和DR显然很重要,所以难以理解。

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

您不需要实施全面的事件采购解决方案来实现这一目标。如果您只是将所有事件存储在事件日志中,则可以根据需要检索和重播它们。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

如果您存储了发送到服务器的所有命令(例如,在日志中),您可以将所有命令从第一个命令发送到总线,直到最后一个命令,您可以重现所有查询端。这就是Command Sourcing。 通过Command Sourcing,您可以随时随地进行事件采购。