2010-11-20 2 views
0

하나의 복잡한 결합에 대해 여러 질문에 대한 비슷한 질문을 보았습니다.이 경우 답변은 항상 "의존적 인"것이지만 하향식으로 입력 할 수 있는지 궁금합니다. 잘 설명하면 설명하기가 너무 복잡하지 않을 것입니다.여러 조인과 캐시 된 개별 쿼리?

약 3-4 개의 서로 다른 테이블의 정보를 가져와야하는 페이지를 표시하고 있습니다. 클럽에 속할 수있는 사람이 있고 그 클럽에 많은 이벤트가 있다고 가정 해 봅시다. 클럽, 사람, 이벤트 정보 등 정보를 가져와야합니다.

지금은 3-4 개의 개별 테이블로 구성되어 있지만 이벤트 테이블에는 많은 수의 열이 있습니다. 확실하게 정규화되지는 않았지만 그렇게해서 3-5 조인을 넘지 않아도됩니다. 지금은 작은 데이터 세트로는 문제가 없지만 3 ~ 4 개의 개별 쿼리로 분할 한 다음 그 중 일부의 결과를 캐싱하는 것이 더 빠를 것인지 궁금해 할 수는 없습니다. 이벤트 테이블은 상당히 자주 업데이트되므로 무효화되는 것을 볼 수는 있지만 조직 및 사용자 테이블은 그렇지 않습니다. 따라서 후자의 솔루션이 혜택을 볼 수 있습니다. 그럼 어느 쪽이 좋습니다?

또한 이벤트 테이블에는 큰 수의 열이 있으며 그 중 일부는 자주 업데이트되는 데이터를 저장하거나 큰 텍스트 열은 일련 화 된 키/값 템플릿 데이터를 저장합니다. 그 테이블을 다른 테이블로 파티션하는 것이 현명할까요? 그렇다면 자주 업데이트되는 "일반"데이터와 이벤트 데이터가 생깁니 까? 어떤 도움을 주셔서 감사합니다.

+0

병목이있는 곳의 일반적인 느낌을 얻기 위해'EXPLAIN'을 사용해 보았습니까? – stillstanding

답변

1

데이터 및 테이블의 특정 세트 및 사용 빈도를 테스트하지 않은 경우에는 좋은 대답이 아닙니다.

각 장단점에 대해 잘 알고있는 것처럼 보입니다. 많은 양의 데이터를 캐싱 할 공간이 있거나 많은 다른 사용자가 특정 클럽에 액세스하는 경우 각 캐싱을 캐싱하는 것이 좋습니다.

이미 memcached를 설정 한 적이 있다면 각 쿼리를 분리하고 캐싱하는 것이 좋습니다. 데이터가 변경 될 때 올바른 캐시를 무효화하는 데 약간의 추가 작업이 필요하지만 캐싱은 성능 측면에서 좋은 아이디어이므로이 방법을 사용하면 초기 단계에이를 얻을 수 있습니다.

나는 지금이 부분에 대해 너무 걱정하지 않을 것입니다. 미숙 한 최적화는 결국 당신이 할 수있는 다른 것들이있을 때 많은 시간을 소비하게 될 것입니다.

성능 문제 만 해결하면 나중에 응용 프로그램의 프로필을 작성하고 실제로 필요한 장소를 최적화하는 데 집중할 수 있습니다.

+0

입력 해 주셔서 감사합니다. – Jeff

관련 문제