2012-03-03 6 views
0

필자는 매우 자주 끌어 와야 할 ~ 10,000 행마다 약 10 개의 테이블을 가지고 있습니다. 예를 들어아주 많은 수의 행을 매우 자주 가져옵니다 - 여기에 memcached가 필요합니까?

, 국가 목록, 세상의 모든 학교의 목록 등

PHP는 (내 지식) 메모리에이 물건을 지속 할 수없는 그래서 나는 SELECT 위해 서버를 조회해야 * FROM TABLE 매번. 여기 memcached를 사용해야합니까? 처음에는 명확하지만 절대적으로 그렇습니다. 그러나 두 번째 생각에서 이미 mysql이 캐시되지 않고 거의 중복 될 수 있습니까?

mysql이 데이터를 캐시하는 방식 (또는 전체 테이블을 캐시하는 경우)에 대해 너무 많이 이해하지 못했습니다.

답변

2

MySQL 쿼리 캐시를 사용할 수 있지만 여전히 DB 리소스를 사용하여 연결을 설정하고 쿼리를 실행합니다. 페이지가 상대적으로 정적 인 경우 다른 옵션은 opcode caching입니다. 그러나 memcached가 가장 유연한 솔루션이라고 생각합니다. 예를 들어 응용 프로그램 내의 다양한 코드 포인트에서 액세스해야하는 국가 목록이있는 경우 영구 저장소 (mysql)에서 데이터를 가져 와서 memcached에 저장할 수 있습니다. 그런 다음 비즈니스 요구 사항에 대해 응용 프로그램의 모든 부분 (배치 프로세스 및 cronjob 포함)에서 데이터를 사용할 수 있습니다.

0

당신이 필요로 할 여기 캐시의 일부 종류, 확실하게; 데이터베이스 내부와 주변의 캐싱 계층은 memcached가 제공 할 수있는 것보다 훨씬 효율적이지 않습니다.

즉, 쿼리를 기반으로 생성하는 콘텐츠를 캐시하는 것이 아니라 쿼리 자체를 캐시하는 것이 최종 결론으로 ​​넘어 간다면 나는 결론에 도달했다고 생각합니다. - 더 많은 분석이 필요합니다.

출력 생성 중에 이러한 쿼리의 내용 이외에 어떤 데이터가 사용됩니까? 페이지 캐시 또는 페이지 조각 캐시 (또는 역방향 프록시 캐싱)가 더 적합할까요? "자주"이러한 쿼리를 실행해야합니까? 기본 데이터는 얼마나 자주 변경됩니까? 일어날 때 어떤 종류의 알림 이벤트가 있습니까?

WHERE 절이없는 SELECT * 쿼리는 "코드 냄새"(즉, 잘못된 방법으로 처리되고 있음을 나타냅니다) 특히 모든 데이터가 사용자에게 직접 표시되는 것은 아닙니다.

관련 문제