繁体   English   中英

加载/延迟加载相关实体

[英]Loading /Lazy loading of related entities

场景:

我有一个(主要)设计问题。 我有DTO类来填充数据库中的数据并在UI中使用。 我的情况是:

我有一个HouseObject,其中有TenantObject(一对多),而每个租户都有AccountObject(又是一对多),依此类推(仅示例场景)

问题:

现在我的问题是,当从DB for HouseObject检索数据时,我是否应该获取所有TenantObjects的列表以及所有AccountObjects的反过来的列表等等? 由于一对多的关系,对于一个HouseObject,我们可能正在为租户,帐户等检索大量数据。

我们是否应该只检索HouseObject并为每个依赖项触发单个依赖项查询? 还是应该在一次调用中一次获取所有数据并将其绑定到屏幕上。 哪个是理想的解决方案?

请指教。

如果您正在寻找性能,而这正是我想要的,那么您就必须从广义上考虑,而不仅仅是Lazy/not lazy 您必须考虑一下,您拥有多少数据以及多长时间更新一次; 它存储在哪里? 应用程序在何处运行,如何使用等。

我看到几种情况:

  1. 小块的延迟加载。 我喜欢这一点,因为它在经常修改数据时很有用。 您一直都在获取新数据。

  2. 在应用程序层中进行缓存。 这可以是2个子场景

    一种。 缓存就绪模型。 您准备了完全初始化的模型。

    b。 缓存数据的不同部分(房屋,租户,帐户)并在内存中查询。

  3. 准备您的非规范化联接数据,并将其存储在实例化 (Oracle)或索引 (Sql Server)视图中。 您仍然可以去数据库,但是它比每次联接数据或每次进行多次调用都更加有效。

  4. #1和#2.b的组合,我最喜欢。 它需要更多的编码,但是可以获得最佳的性能和并发性。 即使您的数据发生变异,您也可以使用一种机制来转储缓存。 而且,如果您的帐户更改,则无需转储租户。

还有一件事,如果您需要更新数据,请记住-使用不同的模型。 显示模型应仅为ViewModelSave则应具有单独的模型。 例如,您的保存模型的字段可能已updatedBy视图模型的字段未更新。

您确实没有“重大”问题。 对于开发人员来说,这是正常的日常问题。 您需要考虑系统的各个方面。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM