gpt4 book ai didi

sql-server - CQRS:写入 RDBMS,从 NoSQL 读取?

转载 作者:行者123 更新时间:2023-12-02 20:49:01 25 4
gpt4 key购买 nike

我一直在考虑分离读取和写入流程,甚至让它们使用不同的数据库,通过水平扩展“读取”数据库来提供最佳的快速数据可用性。我将使我的项目写入数据库,将对象更改通知推送到队列中,以便另一个服务读取消息并将更新的数据复制到一个或多个非规范化的“读取”数据库。考虑到这一点,我发现如果“写入”数据库也非规范化,这会很糟糕。
示例:假设有一个用户个人资料,其名称为已毕业的大学用户。假设我将此信息存储在“写入”数据库中,如下所示:

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

假设用户打开他的个人资料进行编辑,而在他执行此操作时,另一个人(剑桥代表)已将名称从“Cambridge”更改为“C.U.”。并保存更改,以便它们同时进入“写入”和“读取”数据库。更新大学名称的服务完成了工作,现在大学到处都"认为"OK。此后,第一个用户使用旧大学名称保存更新的个人资料,该名称将出现在他的个人资料显示的每个位置。
这类问题让我认为“写入”数据库必须始终规范化,不包含重复项。但我从未从有关 CQRS 的文章中认识到这一原则。难道是我想错了?

最佳答案

你说得对!

这个“原理”在DDD book里写得非常清楚和详细。作者:埃里克·埃文斯。规则是聚合只能通过 ID 引用其他聚合。在 CQRS 中,聚合仅在写入端使用/访问。

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

关于sql-server - CQRS:写入 RDBMS,从 NoSQL 读取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43018987/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com