使用 CQRS 和 EventStore 时如何更新/迁移数据?

Tre*_*ent 5 events domain-driven-design data-migration cqrs

所以我目前正在研究 CQRS 架构和 EventStore“模式”。

它将应用程序打开到可扩展性和灵活性以及测试的新维度。

但是我仍然坚持如何正确处理数据迁移。

这是一个具体的用例:

假设我想管理一个包含文章和评论的博客。

在写入端,我使用 MySQL,在读取端 ElasticSearch,现在每次处理命令时,我都会在写入端持久化数据,在读取端调度一个事件来持久化数据。

现在让我们说我有某种 ViewModel 被调用ArticleSummary,它包含一个 id 和一个标题。

我有一个新的功能请求,要将文章标签包含到我的 中ArticleSummary,我会向模型添加一些字典以包含标签。

鉴于我的写入层中已经存在标签,我需要更新或使用新的“表”来正确使用新包含的数据。

我知道 EventLog Replay 策略包括重放所有事件以“更新”所有 ViewModel,但是,严肃地说,当我们有十亿行时它是否可行?

有没有经过验证的策略?任何反馈?

Ebe*_*oux 5

我知道 EventLog Replay 策略包括重放所有事件以“更新”所有 ViewModel,但是,严肃地说,当我们有十亿行时它是否可行?

我会说“是”:)

您将为新的摘要功能编写一个处理程序,无论如何都会更新您的查询端。所以你已经有了代码。编写特殊的一次性迁移代码可能不会给您带来太多好处。当您必须对需要进行一些数据转换的新系统进行初始更新时,我会使用迁移代码,但在这种情况下,您的基础设施将存在。

您只需要将相关事件发送到新处理程序,这样您也不会重播所有内容

无论如何,如果您有十亿行数据,您的服务器可能能够处理负载:)