2011-07-06 5 views
3

대용량 데이터가있는 Symfony 1.4 프로젝트를 실행합니다. 기본 페이지 및 카테고리 페이지는 사용 가능한 행의 수를 알아야하는 호출기를 사용합니다. 나는이 페이지들에서 1 분의 로딩 시간을 이끌어내는 호출기에 조인을 포함하는 질의를 전달하고있다.자동으로 캐시를 다시 작성

각 작업에 대해 cache.yml을 구성했습니다. 하지만 해결 방법이 충분하지 않으며 여기에 내 가정이 있다고 생각합니다.

Symfony는 사용자가 한 번의 요청으로 캐시를 다시 작성합니다. 사물을 단순화하기 위해이 사용자를 "캐시 피해자"라고 부르 자.

우리의 경우 데이터를 최신 상태로 업데이트해야하므로 10 분이면 충분합니다. 분명히 사용자가 "캐시 피해자"가되어서 기꺼이 요청을 취소하지 않으면 캐시가 다시 작성되지 않습니다. 이 가정은 정확합니까?

그래서이 아이디어를 내놓았습니다 : Symfony는 캐시를 재 구축 한 후 http-request를 위장해야합니다. 새 캐시 항목은 임시 파일/디렉토리에 기록해야하며 캐시 재구성이 완료되면 바로 이전 캐시 항목으로 스와핑해야합니다.

이것이 가능합니까?

제 생각에는 이중 버퍼링의 개념과 비슷합니다.

화면이 한 줄씩 늘어나는 멀티 플레이어 게임에 "gpu-victim"이 하나만 있다면 어리석지 않습니까? (이것은 내가 알고하는 베다 양면 비교입니다 ...;))

편집에는 "캐시 피해자가"없다

- 매 10 초마다 페이지를 다시로드는 모든 사용자에게 1 분이 소요됩니다.

+3

은 솔직히 (? 내가 제대로 이해하면) 내가 먼저 왜 호출기에 대한 행을 계산에보고 싶은데 1 분 소요에 참조 완료하십시오. 어느 쪽이든 해결해야 할 분명한 문제는 부실 캐시가있는 로딩 시간입니다.둘째, 요청을 취소하는 사용자는 일반적으로 웹 서버가 요청 실행을 완료하지 못하도록합니다 (시간이 초과되거나 다른 한도에 도달하지 않는 한). – Gerry

+0

알겠습니다. 그러면 "요청 처리 중"이 취소됩니다. 많은 양의 데이터와 조인 때문에 1 분이 소요됩니다. 호출기 - 쿼리 자체는 매우 간단합니다. 호출기는 사용 가능한 페이지 수를 계산하므로 항목 수를 알아야합니다. – fishbone

+0

먼저 그 일을해야한다고 제안합니다. 왜 호출기를 채우는 것이 그렇게 오래 걸릴지에 대한 현명한 설명을 볼 수 없습니다. 나는 당신이 그것을 최적화 할 수 있다고 확신하지만, 구체적인 것을 알지 못하면 더 이상 논평 할 수 없습니다. – Gerry

답변

0

귀하의 문제는 일부 누락되거나 잘못된 색인으로 인한 것 같습니다. 요즘 대형 축구 사이트 (2M 페이지/일)를위한 sf1.4 프로젝트를 운영하고 있으며 데이터베이스에 1M 개의 행이 있어도 호출기가 너무 느려지지 않습니다. EXPLAIN을 사용하여 쿼리를 살펴보고 어디로 악화되는지 확인하십시오.

+0

나는 EXPLAIN 및 최적화 된 인덱스를 사용하여이를 시도했다. 우리는 하드웨어를 업그레이드 했으므로 상황이 나아졌습니다. 그러나, 당신은 내 질문에 대답하지 않았다. 나는 캐시 스와핑의 개념이 가능한지 질문했다. 새 캐시 항목을 작성할 때 사용자가 대기해야하는 이유는 무엇입니까? - 오래된 캐시 항목은 계속 사용할 수 있습니다. – fishbone

+0

그 점이 보이지 않습니다. 예, 캐시 스와핑은 가능하지만이 솔루션은 일부 매우 중요한 시나리오에만 해당됩니다. 그리고 당신은 당신의 DB에 대한 작업을 다른 방법으로 해결할 수 있다고 생각합니다. – dlondero

0

죄송합니다. 거기에는 배지가 있습니까? cache.yml을 구성하면 REQUESTS WITHOUT PARAMETERS에 대한 앱의보기 레이어 (즉, css, js 및 html)를 캐싱하기 만하면됩니다. 호출기를 탐색하면 분명히 GET 요청에? page = X가 표시됩니다. 심포니 1.4 config.yml 문서에서 촬영

:

들어오는 쿼리 문자열에 GET 매개 변수 요청 또는 POST와 함께 제출은, PUT, 또는 방법을 DELETE는 관계없이, 심포니 캐시되지 않습니다 구성. http://www.symfony-project.org/reference/1_4/en/09-Cache

데이터베이스 결과를 캐시하는 데 도움이되는 것은 무엇이지만 symfony/doctrine에서는 고통스러운 프로세스입니다. 이 http://www.symfony-project.org/more-with-symfony/1_4/en/08-Advanced-Doctrine-Usage#chapter_08_using_doctrine_result_caching

편집 : 이뿐만 아니라 당신을 도울 수 있습니다 http://www.zalas.eu/symfony-meets-apc-alternative-php-cache