首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >多版本并发控制与CQRS和DDD

多版本并发控制与CQRS和DDD
EN

Stack Overflow用户
提问于 2014-01-31 17:59:13
回答 3查看 1.4K关注 0票数 2

为了支持离线客户端,我想评估如何将多版本并发控制与CQRS-DDD系统相结合。

从CouchDB学习,我觉得很想为每个实体提供一个版本字段。然而,还有其他版本的并发算法,如矢量时钟。这让我想,也许我不应该为每个实体和/或事件公开这个版本的概念。

不幸的是,我看到的大多数实现都基于这样一种假设,即软件运行在一个服务器上,其中事件的时间戳来自一个可靠的来源。但是,如果某些事件是远程和脱机生成的,则本地客户端时钟偏移量会出现问题。在这种情况下,正常的时间戳似乎不是排序我的事件的可靠来源。

  1. 这是否迫使我评估某种形式的MVCC解决方案,而不是基于时间戳?
  2. 需要脱机CQRS客户端评估哪些实现细节才能将延迟的事件链与中央服务器同步?
  3. 有什么好的开源例子吗?
  4. 我的DDD实体和/或CQRS查询DTO应该提供一个版本参数吗?
EN

回答 3

Stack Overflow用户

发布于 2014-09-29 09:29:23

我管理一个版本号,它对我来说效果很好。版本号的好处是,在处理并发冲突时,可以使代码非常显式。我的方法是确保我的DTO都有它们关联的聚合的版本号。当我发送命令时,它具有客户端上看到的当前版本。这个数字可能与聚合的实际版本同步,也可能不同步,即。客户已经离线了。在事件持久化之前,我检查版本号是否是我所期望的,如果没有,我会对照前面的事件检查其中的任何一个实际冲突。只有这样,我才会提出例外。这本质上是一种非常细粒度的乐观并发形式。如果您有兴趣的话,我已经在我的博客:http://danielwhittaker.me/2014/09/29/handling-concurrency-issues-cqrs-event-sourced-system/上写了更多的细节,包括一些代码示例

我希望这能帮上忙。

票数 3
EN

Stack Overflow用户

发布于 2014-01-31 21:08:21

我建议你看看格雷格在这个问题上的陈述。它可能有你在寻找https://skillsmatter.com/skillscasts/1980-cqrs-not-just-for-server-systems的答案

票数 0
EN

Stack Overflow用户

发布于 2014-02-03 14:26:19

我想您应该重新考虑您的域,将远程客户端逻辑分离到它自己的有界上下文中,并使用已知的用于BC互操作的DDD原则将其与另一个BC集成。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21486891

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档