0

我想知道 OneToMany Realationship 是否会影响应用程序的性能。比如说,城市和用户实体是一对多的关系,也就是说,一个城市可以包含很多用户。现在在实体类中设置关系后,每当我检索一个城市时,我都可以通过以下方式获取其用户:

$users = $city->getUsers();

现在,我想知道内部架构。每当我检索城市时,它还会查询所有用户吗?如果是这样,假设一个城市可以有 10000 个用户。现在,我只检索一个城市不是性能问题,而是它与所有 10000 个用户相处得很好吗?或者,它使用了其他一些机制,我完全可以实现它?

希望从您的专家那里得到解释,以及关于这种情况的最佳实践的建议。提前致谢。

4

1 回答 1

1

好吧,我不是专家,但我可以与您分享一些您可以在应用程序开发中考虑的良好实践:

获取="EXTRA_LAZY"

默认情况下,学说 2.0 将加载整个集合并将其存储在内存中。在像您这样的场景中,用户集合可能是表维度的性能问题。那么,为什么不将关系标记为 EXTRA_LAZY?仅在访问时才加载具有此获取模式的实体,而不会触发集合的完全加载。

/**
 * @ManyToMany(targetEntity="User", mappedBy="cities", fetch="EXTRA_LAZY")
 */

允许这种获取模式,您可以使用类似slide()count()健壮的功能。例如:

$users = $em->getRepository('models\User')->findAll();
echo  $users->count();

该代码触发了一条 sql 语句,就像select count(*) from users..在 $user 集合中循环一样。

保湿对象

并不总是需要加载实体集合。如果您正在创建一个博客系统,我们只需要提供一个帖子标题列表。这种基础设施可以通过Hydrating 对象进行改进以用于只读目的。

有用的链接

一些链接可将您引导至官方学说文档指南。

于 2012-08-03T14:46:42.183 回答