2015-01-12 2 views
8

나는 Symfony2 프로젝트에서 작업 중이다. 내 프로젝트는 데이터베이스를 사용하여 데이터를 저장하고 Doctrine2는 데이터를 검색합니다.Doctrine 결과 캐싱 Symfony2

데이터베이스 내의 데이터가 커짐에 따라 쿼리가 매우 느려지고 전체 웹 앱이로드하는 데 약 2 분이 걸리거나 전혀로드되지 않습니다.

내 자체 수정을 볼 수있는 유일한 방법은 일부 쿼리 결과를 캐시하는 것이지만 어떻게 수행 할 수 있습니까? 그러한 문제를 다루는 다른 방법이 없다면.

+0

몇 개의 SQL 쿼리가 수행됩니까? Symfony2 툴바에서 이것을 볼 수 있습니다. 이것이 거대한 수 (예를 들어 100)라면 저장소 ([임의의 예] (http://stackoverflow.com/a/27907665/2257664))에 함수를 만들어이 수를 줄일 수 있습니다. –

답변

16

Doctrine configuration에 캐시 드라이버를 설치하고 구성해야합니다 (귀하의 경우에는 result_cache_driver이 중요합니다). 이 수행 한 후에는 useResultCache(true)

$cachedResult = $doctrine->getManager() 
    ->createQueryBuilder() 
    ->(...) 
    ->useResultCache(true) 
    ->(...) 

확인 this blog post

참고를 설정하여 결과 캐시를 사용하는 Doctrine을 할 수 있습니다 : 기본적으로, 개발 환경에서, 결과 캐시는 사용되지 않습니다

EDIT : DBAL을 사용하고 있고 사용하지 않는 경우 ORM - SymfonyDoctrineBundle은 기본적으로이 종류의 캐시를 지원하지 않지만 추가 할 수 있습니다 다음을 통해 직접 지원 this 자세한 가이드

+0

Dzieki.. 나는 이것을 보며 몇 가지 결과를 얻 자마자 곧 돌아올 것입니다. – Tomazi

+1

사용자 세션 당이 캐시가 빠르게 캐시되거나 globaly 캐시됩니다 ..? – Tomazi

+0

또는 DB 상'/ ** * @Cache (expires = "+ 5 minutes", public = true) 쿼리를 담당하는 클래스에 대해이 작업을 수행 할 수 있습니까? * /' – Tomazi

0

개발자 모드에서 Symfony2는 모든 쿼리에 대해 새 캐시를 만듭니다. 그래서 많은 쿼리를 가지고 있다고 가정하고 모든 쿼리를 하나씩 캐시합니다.

프로덕션 모드에서 캐시가 한 번만 저장되기 때문에 프로덕션 모드보다 시간이 오래 걸립니다.

+0

네, 이해하지만 botch 개발 및 생산 환경에 문제가 있습니다 – Tomazi

+0

yopu는 생산 모드로 먼저 이동하려면 캐시를 지워야합니다 ..! php app/console assetic : 덤프 –