首页 文章

CQRS:写入RDBMS,从NoSQL读取?

提问于
浏览
1

我要将我的项目写入数据库,将对象更改通知到队列中,以便另一个服务读取消息并将更新的数据复制到一个或多个非规范化的数据库中 . 考虑到这一点,我发现如果"write"数据库也被非规范化,这将是不好的 .
示例:假设有一个用户 Profiles ,其名称为大学用户已毕业 . 假设我将此信息存储在"write"数据库中,如下所示:

{ userId: 100, name: "John", universityId: 200, universityName: "Cambridge"}

假设用户打开了他的 Profiles 进行编辑,当他正在做另一个人时,剑桥代表已将名称从"Cambridge"更改为"C.U."并保存更改,以便他们转到"write"和"read"数据库 . 更新了大学名称的服务完成了它的工作和"thinks"现在大学到处都可以 . 在此之后,第一个用户使用旧的大学名称保存更新的 Profiles ,此名称将转到他的 Profiles 所呈现的每个位置 .
这种问题让我觉得"write"数据库 must 总是被规范化,不包含重复项 . 但是我从没有从关于CQRS的内容中找到这个原则 . 我错了吗?

1 回答

  • 4

    你做对了!

    这个"principle"在Eric Evans的DDD book中写得非常清楚和详细 . 规则是 Aggregates can reference other Aggregates only by their ID . 在CQRS中,仅在写入侧使用/访问聚合 .

    另一方面,读取模型应该针对读取进行优化,而非规范化是实现此目的的一种方式 . 我总是这样做 . 通过聆听正确的事件,他们可以保持同步 .

相关问题