事件来源。汇总有子级列表或父级ID?

问题描述 投票:0回答:1

我应该存储在儿童的聚合列表中还是仅存储ParentID?

孩子的清单可能很大(数千个)。添加或删除一个孩子意味着仅添加或删除一个孩子时,可以将成千上万的孩子保存回存储。ParentID非常易于管理。它使所有聚合变得简单(没有列表!)。它允许通过简单地通过其ParentID查询聚合来快速创建列表。它允许任意级别的层次结构,这些层次结构可以在不创建巨大聚合的情况下快速递归地重建。如果我要使用ParentID,是否应该在事件表中添加ParentIdGuid字段以引用聚合的父级,以便快速生成列表?

编辑:

Brad的回答使我意识到,parentid将不会包含在已更新的子对象的结果json中,因为我只会包含已更改的字段。因此,我不能依赖于postgress的json索引。这意味着我将不得不在事件表本身上创建一个parentid列。

cqrs event-sourcing
1个回答
1
投票

孩子的父母身分证绝对是必经之路。考虑一下数据库外键。该关系在子记录中作为父ID指针保存。

当实例化内存中的AR以使用它时,应使用ParentID指针填充子代列表。如果这听起来很昂贵,也许您实现了按需填充功能,因此除非有必要,否则您无需支付任何费用。

事件表有两种方法。它包含更改后实体的所有属性,也可以仅包含修改后的字段。如果您正在保存所有属性,那么在每个事件中都应使用ParentID。如果您只想保存更改,则该实体在事件列表中的某个位置应为ParentID;可能只是在创建事件中。使用事件搜索,您可以将所有更改事件加起来以达到当前状态,因此这将为您提供实体中的ParentID。

© www.soinside.com 2019 - 2024. All rights reserved.