【问题标题】:CQRS: How to implement eventual consistency between MongoDB (read model) and SQL Server (write model)CQRS:如何实现 MongoDB(读取模型)和 SQL Server(写入模型)之间的最终一致性
【发布时间】:2015-09-21 17:27:55
【问题描述】:
我有一个项目使用 CQRS 设计模式和领域驱动设计。在这个项目的读取端,我使用物化视图来构建读取模型,以便读取端和写入端可以通过 SQL Server 更新为一致。
我想重构我的项目并将 MongoDB 用于读取端。我对MongoDB了解不多。是否有任何算法或策略来保持 NoSQL 数据库 (MongoDB) 和关系数据库 (SQL Server) 之间的数据一致?
【问题讨论】:
标签:
sql-server
mongodb
domain-driven-design
cqrs
【解决方案1】:
要同步您的查询(读取端)和命令(写入端)的数据存储,您可以使用以下策略之一:
-
同步 - 每个命令也同步更新查询端数据存储
-
异步 - 每个命令都会触发查询端数据存储的异步更新
-
计划 - 预定义作业定期运行并更新查询端数据存储
-
按需 - 查询端数据存储按需更新。例如,当请求到来时,如果检测到数据过时,您有某种算法会触发更新。
因此,由您决定哪种策略最适合您的项目。
只有使用 同步 方法才能获得强一致性。
其他选项会导致最终的一致性,并且它们会改变数据可能过时的时间。在 异步 方法中,您有以毫秒为单位的陈旧数据。