2012-03-29 3 views
-1

최근 웹 사이트에서 작업 중이며 응용 프로그램의 속도를 높이고 싶습니다. 사용자의 페이지를 캐싱하고 싶지만 다른 사용자가 새 피드를 게시하면 해당 새 피드로 홈페이지가 업데이트되는 것처럼 페이지가 동적입니다. 한 사용자의 홈페이지와 그의 친구의 친구가 새로운 피드를 캐시하면 해당 캐시가 만료되고 다음 번에 홈페이지를 다시 방문 할 때 응용 프로그램이 데이터베이스에 접속하여 새 피드를 가져 와서 캐시합니다.Memcached로 PHP 응용 프로그램의 속도를 높이는 방법

저는 내 DB에 memcache와 PHP 및 MySQL을 사용하고 있습니다. friends, feedsusers이라는 테이블이 있습니다.

모든 사용자의 친구를 캐시하는 것이 효율적일 수 있으며 해당 사용자가 피드를 게시하면 내 앱이 친구를 가져오고 사용자 ID로 알림을 캐시하므로 친구 로그인 앱이 로그인 할 때 모든 페이지에서 액션 (이 경우 캐시에서 홈페이지 삭제)을 취하는 알림입니다.

감사합니다, 있습니다 END_STRONG_1

답변

2

응용 프로그램을 프로파일하고 가져 오는 데 비용이 많이 드는 (또는 계산하는) 데이터에 액세스하는 위치를 찾습니다. 이러한 장소는 memcached로 시작하기에 좋은 장소입니다. 단, 읽기보다 쓰기가 많은 경우가 아닙니다 (캐시를 사용하는 것보다 캐시를 ​​자주 업데이트해야하는 경우).

적 접근이 아니라 (잠재적으로 캐시하면 실제로 해야 캐시에서 물건을 누른 상태에서) 대부분 거의 액세스되지 않는 데이터를 보유 꽤 전체 memcached를보다 더 아무것도로 이어질 수있는 모든 캐싱. 대부분의 경우 memcached를 키 - 값 형식으로 데이터베이스의 1 : 1 복사본으로 사용하면 안됩니다.

+0

글쎄, 내 경우에는 내가 생각하기에 그다지 문제가되지 않도록 모든 페이지에 거의 친구 목록을 가져와야한다. 그러나 당신이 맞다면, 전체 페이지를 캐시하는 것이 현명하지는 않습니다. 귀하의 답변에 감사드립니다. –

+0

글쎄, 얼마나 많은 친구들이 우리 얘기하는거야? 수천? 백만? 쿼리에는 몇 개의 조인이 들어 있습니까? WHERE 절에 몇 개의 열이 표시됩니까? 몇 줄의 코드로 가난한 사람의 쿼리 로그를 만들 수 있습니다 (xdebug보다 더 가벼운 접근 방법이며, * 어떤 쿼리가 다른 쿼리보다 오래 걸릴지를 알려줄 수 있습니다). – Joey

+0

우리는 1000 p/u로 제한하고 있기 때문에 사용자 당 평균 500 명의 친구에 대해 이야기하고 있습니다. 지금 나는 32GB의 램을 가진 4 개의 3.6GHZ 8core PC를 갖고 있습니다.나는 테이블에서 친구를 찾는 데 조인을 사용하지 않습니다. 먼저 'uid1 = (user_id) AND active = 1'을 선택한 친구와'uid1 = (user_id) AND active = 1' 친구를 찾은 다음 데이터베이스로 두 번째로 가서 'users' 테이블에서 친구들을 검색하고 객체를 인스턴스화합니다. –

0

모든 DB 쿼리를 처리하는 클래스를 작성은 테이블을 캐시와 캐시 테이블 대신하여 DB에 쿼리를 수행합니다. 표에 삽입 또는 업데이트 할 때마다 캐시를 ​​업데이트하십시오.

1

서버 측 최적화를 시작하기 전에 ySlow을 실행하고 A 등급을 얻으십시오. JavaScript에 대해서도 열심히 살펴보십시오. jQuery를 사용하고 있다면 jQuery를 없애면 사이트의 전반적인 성능이 크게 향상 될 것입니다. 프론트 엔드 최적화가 대개 더 중요합니다.

다음 단계는 서버 측 코드 정리를 최적화하는 것입니다. EXPLAIN이라는 SQL 쿼리를 테스트 해보십시오. 일부 색인이 누락되었는지 확인하십시오. 그리고 나서 Xdebug으로 PHP 측에서 프로파일 링을 수행하십시오. 병목 현상이 어디 있는지 확인하십시오.

그리고 나서 캐싱을 시작합니다. Memcached의 경우 웹 사이트가 서버 클러스터의 최상위에서 실행되지 않는 한 웹 사이트가 필요하지 않습니다. 지옥 .. 그것은 해로울 수도 있습니다. 사이트가 단일 상자에 있으면 APC으로 더 좋은 결과를 얻을 수 있습니다. Memcached와 달리 성격 상 배포되지 않습니다.

+0

고마워, 내가 프로 PHP 응용 프로그램 성능이라는 책을 읽고 덕분에 당신이 제안한 접근 방식을 알고 있지만 memcached와 효율적으로 캐시하는 방법에 대해 아무것도 찾을 수 없습니다. 나는 아직도 Xdebug를 사용해야하고 어떤 기능이 가장 많은 리소스를 사용하고 최적화되어 있는지 알아야 할 것 같다. 그리고 네, APC가 최고의 도구가 아니라고 말하면서 클러스터에 내 앱을 돌릴 것입니다. :) –

관련 문제