cqrs - 将关系数据迁移到事件存储

标签 cqrs data-migration event-sourcing

我正在使用我自己的 CQRS 模式实现将一个旧项目迁移到 CQRS。我开始此迁移的主要原因是摆脱 n 层架构造成的困惑。然而,与许多其他项目一样,该项目正在使用关系数据存储。

此过程中的当前状态是我有进行更改的命令和隔离查询的查询对象。这意味着从客户端到服务器,我有一个 CQRS-ish 方式来更改和查询数据,尽管我没有发布任何来自更改的事件,也没有非规范化的读取存储。我应该提一下,我也有非常贫血的 DTO 作为我的“领域模型”。所有行为都分布在 n 层及其处理程序、管理器和所有那些可怕的层中。

我想知道如何进行下一步。我现在想要的是开始构建一个负责其行为的领域模型,原因是我想开始使用事件存储作为事实来源,这让我想到了我的问题:

如何将数据从关系数据存储迁移到事件存储?

我有一个非常规范化的数据模型,其中包含非常重要的数据,必须进行迁移。我明白我不能指望从这些数据中捕捉到任何意图,因为它已经死了,但我应该如何处理它?我应该创建大量迁移命令吗?很高兴听到您的经验。

最佳答案

我还没有机会尝试这个,但我想尝试的东西会在多个阶段起作用:

  1. 首先列出系统需要的所有事件。
  2. 接下来将 View 引入关系数据库以表示事件。
  3. 编写自定义实用程序以从 View 中进行选择以构建正确的事件对象。
  4. 让自定义实用程序以正确的顺序将事件对象写入事件存储。
  5. 最后确保从事件存储中刷新非规范化 View 模型。

我认为将事件写入事件存储的顺序有点棘手,需要多加思考。但是鉴于这是一个迁移过程,所以只要域的最终状态是正确的,我认为这并不重要。如果您的关系表有时间戳,那么这可能会有所帮助。

我决定构建事件对象比创建命令更合适,因为关系数据代表过去发生的操作的域。

关于cqrs - 将关系数据迁移到事件存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6514492/

相关文章:

microservices - 播种微服务数据库

django - 在Django 1.7上的数据迁移中,直到原子 block 结束,才能执行查询

mysql - 我可以将数据从一对多关系迁移到 mysql 中的 json 对象列吗?

architecture - 如何在 DDD + CQRS + Event Sourcing 方法中处理业务规则?

ruby-on-rails - 在 CQRS 和 DDD 流程中创建值对象的位置

database - 如何将 redis 数据库从一台服务器移动到另一台服务器?

migration - 如何在 Eventstore 中进行 Copy 和 Transform 技术?

design-patterns - 在信用交易系统上实现事件溯源

c# - 使用模拟存储库进行单元测试命令类

validation - 在域驱动设计中应该将输入验证放在哪里?