Tre*_*ent 5 events domain-driven-design data-migration cqrs
所以我目前正在研究 CQRS 架构和 EventStore“模式”。
它将应用程序打开到可扩展性和灵活性以及测试的新维度。
但是我仍然坚持如何正确处理数据迁移。
这是一个具体的用例:
假设我想管理一个包含文章和评论的博客。
在写入端,我使用 MySQL,在读取端 ElasticSearch,现在每次处理命令时,我都会在写入端持久化数据,在读取端调度一个事件来持久化数据。
现在让我们说我有某种 ViewModel 被调用ArticleSummary
,它包含一个 id 和一个标题。
我有一个新的功能请求,要将文章标签包含到我的 中ArticleSummary
,我会向模型添加一些字典以包含标签。
鉴于我的写入层中已经存在标签,我需要更新或使用新的“表”来正确使用新包含的数据。
我知道 EventLog Replay 策略包括重放所有事件以“更新”所有 ViewModel,但是,严肃地说,当我们有十亿行时它是否可行?
有没有经过验证的策略?任何反馈?
我知道 EventLog Replay 策略包括重放所有事件以“更新”所有 ViewModel,但是,严肃地说,当我们有十亿行时它是否可行?
我会说“是”:)
您将为新的摘要功能编写一个处理程序,无论如何都会更新您的查询端。所以你已经有了代码。编写特殊的一次性迁移代码可能不会给您带来太多好处。当您必须对需要进行一些数据转换的新系统进行初始更新时,我会使用迁移代码,但在这种情况下,您的基础设施将存在。
您只需要将相关事件发送到新处理程序,这样您也不会重播所有内容。
无论如何,如果您有十亿行数据,您的服务器可能能够处理负载:)