Aggregate CQRS事件存储聚合与投影

Aggregate CQRS事件存储聚合与投影,aggregate,cqrs,projection,event-sourcing,Aggregate,Cqrs,Projection,Event Sourcing,在CQRS事件存储中,“聚合”是包含事件的摘要视图还是仅包含对这些事件边界的引用?(组id) 投影是事件的视图或表示,因此,对于表示边界的聚合,我觉得有意义,而如果聚合包含当前汇总状态,我会对两者之间的重复感到困惑 在CQRS事件存储中,“聚合”是包含事件的摘要视图还是仅包含对这些事件边界的引用?(组id) 事件存储中不存在聚合 事件在事件存储中实时发生 聚合存在于写模型中(CQR的C) 在这种情况下,聚合的基本含义仍然与过去相同;这是一个术语,指一个或多个实体周围的边界,这些实体彼此立即一

在CQRS事件存储中,“聚合”是包含事件的摘要视图还是仅包含对这些事件边界的引用?(组id)

投影是事件的视图或表示,因此,对于表示边界的聚合,我觉得有意义,而如果聚合包含当前汇总状态,我会对两者之间的重复感到困惑

在CQRS事件存储中,“聚合”是包含事件的摘要视图还是仅包含对这些事件边界的引用?(组id)

事件存储中不存在聚合

  • 事件在事件存储中实时发生
  • 聚合存在于写模型中(CQR的C)
在这种情况下,聚合的基本含义仍然与过去相同;这是一个术语,指一个或多个实体周围的边界,这些实体彼此立即一致。聚合的职责是确保对记录簿的写入(命令)遵守业务不变量

在事件存储中,将事件组织成“流”通常很方便;如果您想象一个,流id将只是一个标识符,表示“这些事件都是同一历史的一部分。”

通常情况下,一个聚合->一个流,但通常不总是这样;当您更改模型时,可能需要处理一些例外情况。格雷格·杨在他的新书中介绍了其中的一些

因此,聚合和查询端存储中可能存在相同的数据结构(用于不同目的的重复视图)

是的,也不是。验证写操作时使用的数据结构与用于支持查询的数据结构完全匹配。但是存储空间通常不匹配。换句话说,聚合不会被存储(聚合的状态会被存储);尽管查询视图缓存是相当常见的(同样,不是数据结构本身,而是一种表示,可以用于重新填充数据结构,而不必重放所有事件)


你有没有机会举一个聚合状态数据结构(rdbms)的例子?我发现的每一个示例都被精简为几列,其中包含了include id、source\u id、version等内容,这使得很难直观地显示聚合的范围

一个常见的例子是交易账簿(负责匹配“买入”和“卖出”订单的集合)

在传统的RDBMS存储中,这可能看起来像books表中的一行,具有图书的唯一id、图书跟踪的项目信息、图书激活的日期信息等等。此外,可能会有某种订单表,其中包含uniq id、交易账簿id、订单类型、交易编号、价格和数量(换句话说,聚合需要知道的所有信息以满足其不变量)

在文档存储中,您可以在单个文档中看到所有这些信息——可能是一个包含根对象信息的json文档,以及两个订单对象列表(一个用于购买,一个用于销售)

在事件存储中,您会看到单个的
OrderPlaced
tradeoccurrent
OrderCancelled

聚合似乎是使用整个事件集计算的,除非它变得足够大以保证快照

是的,完全正确。如果您熟悉“折叠函数”,那么事件源只是从某个常见初始状态开始的折叠。当快照可用时,我们将从该状态折叠(折叠的事件数量相应减少)


在具有“快照”的事件源环境中,您可能会看到事件存储和文档存储的组合(其中文档将包含额外的元信息,指示其在事件流中的组装位置)。

聚合在执行其命令后引发零个或多个事件。存储区包含由来自请求的所有聚合引发的所有事件。可以通过聚合id将事件逻辑分组到流中。请更清楚地回答您的问题。我试图弄清楚,关于CQR和事件来源的“聚合”,如Greg Young所述,是否是构成实体的事件的汇总状态。例如,如果组成订单/聚合的事件汇总到一行,并包含数据(订单总数等),或者只有一个聚合id来确定链接可以汇总并表示订单当前状态的事件。看起来是后者,因为读取是从维护状态的投影存储执行的,但我不确定是否丢失了某些内容。命令端,由聚合来建立其状态,并使用该状态处理未来的命令和2。查询端通过读取模型来构建在UI中向用户显示的状态。可能会有更多的读取模型处理相同的事件,这取决于用户需要在屏幕上看到什么。因此,聚合和查询端存储中可能存在相同的数据结构(用于不同目的的重复视图)。聚合是否持久化为事件或规范化集等序列化版本?如果您想了解更多信息,我建议您访问此站点:是否有机会获得聚合状态数据结构(rdbms)的示例?我发现的每一个示例都被精简为几列,其中包含了include id、source_id、version等内容,这使得很难直观地看到聚合的作用域。聚合状态的数据结构对于每个聚合类都是唯一的。如果聚合的状态持久化在快照中,作为一种优化,它可能是sim