查询带有大图的聚集根的性能问题

时间:2019-05-23 18:36:33

标签: java domain-driven-design one-to-many aggregateroot

我正在开发旧Web应用程序的新版本,并且试图为Web应用程序创建适当的域模型。

我有一个旧数据库,这绝对不会改变。一世  为读取和查询端创建了单独的服务。查询端使用带有大量联接的普通sql查询来返回读取模型,这些读取模型大多只是具有来自许多表的字段的普通DTO。那行得通 很好,这些数据块用于填充一些表和表格  用户界面。当我需要进行事务处理并使用应用程序的写入端时,就会出现问题。我无法描述特定的用例,但可以说我  有3个级别的一对多关系,我的ORM不支持延迟加载。

示例: 我有模型A,模型B,模型C。一个事务包括开始和结束A(并且包括更改B的状态)和一个事务删除C(实际上只是更改状态标志,但这并不重要)。 删除C有一些限制,我必须验证所有As的状态。

要做到这一点,尤其是最后一个事务,我需要构建整个C图。如果有人只想删除C,这没问题。  C实例,但是如果他想删除许多C实例怎么办?我需要通过ID列表查询n C,如果n变大,性能会下降。我可以吗  采取什么措施来保存我的概念?我做错什么了吗,因为我  想象聚合根是概念整体,还是通过实体的“删除测试”的交易单元?

Java中的模型示例:

Java中的模型示例:

public class A {
    private Long id;
    ....many fields....
}

public class B {
    private Long id;
    private Set<A> as;
    ....many fields....
}

public class C {
    private Long id;
    private Set<B> bs;
    ....many fields....
}

我可以做一些更好的建模吗?也许反向关系和模型A和C是集合根?但这会在ORM中产生问题。我将不胜感激,不知所措。

0 个答案:

没有答案