CQRS:如何实现MongoDB(读模型)和SQL服务器(写模型)之间的最终一致性
CQRS: How to implement eventual consistency between MongoDB (read model) and SQL Server (write model)
我有一个项目使用域驱动设计的 CQRS 设计模式。在这个项目的读取端,我使用物化视图来构建读取模型,以便SQL服务器可以更新读取端和写入端以保持一致。
我想重构我的项目并使用 MongoDB 作为读取端。我不太了解 MongoDB。是否有任何算法或策略来保持 NoSQL 数据库(MongoDB)和关系数据库(SQL 服务器)之间的数据一致?
要同步您的查询(读取端)和命令(写入端)的数据存储,您可以使用以下策略之一:
- 同步 - 每个命令也同步更新查询端数据存储
- 异步 - 每个命令都会触发查询端数据存储的异步更新
- 计划 - 预定义作业定期运行并更新查询端数据存储
- 按需 - 查询端数据存储按需更新。例如,当请求到来时,如果检测到数据过时,您有某种算法会触发更新。
因此,由您决定哪种策略最适合您的项目。
只有使用同步方法才能获得强一致性。
其他选项会导致最终一致性,并且它们会因数据过时的时间长短而异。在 异步 方法中,您有以毫秒为单位的陈旧数据。
我有一个项目使用域驱动设计的 CQRS 设计模式。在这个项目的读取端,我使用物化视图来构建读取模型,以便SQL服务器可以更新读取端和写入端以保持一致。
我想重构我的项目并使用 MongoDB 作为读取端。我不太了解 MongoDB。是否有任何算法或策略来保持 NoSQL 数据库(MongoDB)和关系数据库(SQL 服务器)之间的数据一致?
要同步您的查询(读取端)和命令(写入端)的数据存储,您可以使用以下策略之一:
- 同步 - 每个命令也同步更新查询端数据存储
- 异步 - 每个命令都会触发查询端数据存储的异步更新
- 计划 - 预定义作业定期运行并更新查询端数据存储
- 按需 - 查询端数据存储按需更新。例如,当请求到来时,如果检测到数据过时,您有某种算法会触发更新。
因此,由您决定哪种策略最适合您的项目。
只有使用同步方法才能获得强一致性。 其他选项会导致最终一致性,并且它们会因数据过时的时间长短而异。在 异步 方法中,您有以毫秒为单位的陈旧数据。