使用具有大量对象的symfony 2 ACL系统时如何获得良好的性能?

时间:2013-08-26 06:45:14

标签: php symfony acl

在我们的项目中,我们使用symfony 2 ACL系统来控制对存储在数据库中的实体的访问(Postgresql)。

在我们想要检查大量对象(几百个)的权限之前,一切正常。然后表现越来越差。在某些页面上,对数据库的查询数量大于4000.这个数字实际上与我们数据库中的实体数量有直接关系。它越多,就越需要完成此页面上的查询。

有没有办法检查用户对许多对象的授权,同时保留下降性能(将查询数保持在低位)?

1 个答案:

答案 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);
}