在我们的项目中,我们使用symfony 2 ACL系统来控制对存储在数据库中的实体的访问(Postgresql)。
在我们想要检查大量对象(几百个)的权限之前,一切正常。然后表现越来越差。在某些页面上,对数据库的查询数量大于4000.这个数字实际上与我们数据库中的实体数量有直接关系。它越多,就越需要完成此页面上的查询。
有没有办法检查用户对许多对象的授权,同时保留下降性能(将查询数保持在低位)?
答案 0 :(得分:0)
实际上可以加载与一个或多个不同实体相关的acl数据。系统尝试在少量查询中加载它们,然后保留数据,以便可以重复使用它们而无需再次访问数据库。
private function loadBlogPostsAcls($blogPostRepository)
{
$oids = array();
foreach ($blogPostRepository->findBy(array(), array('date' => 'asc')) as $blogPost) {
$oids[] = ObjectIdentity::fromDomainObject($blogPost);
}
$this->aclProvider->findAcls($oids);
}