2010-06-17 4 views
2

이 게시물을 참조하여 : How to implement tag countingPHP 및 mySQL을 사용하여 태그 지정 시스템 구현. 캐싱 도움말!

나는 제안 된 3 테이블 태깅 시스템을 완벽하게 구현했습니다. 태그 당 기사 수를 계산하려면 태그 정의 테이블에서 tagArticleCount라는 다른 열을 사용하고 있습니다. (다른 열은 tagId, tagText, tagUrl, tagArticleCount입니다.)

사용자가 기사에 다른 태그를 추가하거나 기존 태그를 삭제할 때마다 추가/제거 된 태그의 카운터를 업데이트하도록 tag_definition_table이 업데이트되도록이 표의 실시간 편집을 구현합니다. 이는 수정이있을 때마다 여분의 쿼리 비용이 들게됩니다. (동시에 태그 및 기사에 대한 관련 링크 항목이 tagLinkTable에서 삭제됩니다.)

대신 실시간 편집을 허용하지 않고 CRON을 사용하여 지정된 기간 후에 각 태그의 카운터를 업데이트 할 수 있습니다. 여기 제가 토론하고 싶은 문제가 있습니다. 이것은 데이터베이스의 기사 수를 캐싱하는 것으로 볼 수 있습니다. 태그를 탐색 할 때 및 해당 태그에 대한 기사 카운터가 최신이 아닌 경우 목록에 기사를 표시하는 방법을 찾도록 도와주십시오. 예 : 1. 카운터에 50 개의 기사가 표시되지만 태그 링크 테이블 (태그와 기사를 연결하는 항목)에 55 개의 항목이 있습니다. 2. 카운터에 50 개의 기사가 표시되지만 태그 링크 테이블에 45 개의 내용이 있습니다.

예제에서 주어진이 2 가지 시나리오를 처리하는 방법. APC를 사용하여이 카운터의 캐시를 유지하려고합니다. 당신의 솔루션에서도 그것을 고려하십시오. 실시간/CRONNED 카운터 업데이트의 성능에 대해서도 논의하십시오.

답변

1

모두 응용 프로그램의 요구 사항에 부합합니다. 정보가 최신 상태를 유지하는 것이 얼마나 중요합니까? 대부분의 경우, 실시간 데이터를 갖는 것이 추가 쿼리의 가치가 있다고 생각합니다.

저는 실제로 최근 개발중인 시스템에서 동일한 문제에 직면했지만 궁극적으로 태그 수 저장을위한 필드를 사용한 솔루션이 작동하지 않을 것이라고 결정했습니다. 귀하의 상황에 적용 할 수있는 경우에 대비하여 다른 방법을 선택한 이유를 고려해 볼 가치가 있습니다.

필드 기반 방법을 사용하면 하나의 계산 만 사용할 수 있습니다. 내 시스템의 경우 몇 가지 수준의 깊이를 사용할 수 있기를 원했습니다. 따라서이 기사의 태그를 예로 들면, 'php', 'mysql', 'best-practices', 'performance'및 'tagging'의 총 개수 이상을 알고 싶었습니다. 나는 또한 다양한 조합의 수를 알고 싶었다. 다음과 같이

내가 갔다 솔루션은 카운트 (*)를 사용했다 :

SELECT count(*) 
FROM items i, categories c 
WHERE c.Id = i.Id 
AND (c.category IN ('php', 'mysql', 'tagging')) 
GROUP BY i.Id 
HAVING COUNT(i.Id)=3 

이 느린지고의 가능성을 완화하기 위해, 나는 관련 데이터가되는 페이지 세그먼트를 채울 AJAX를 사용 표시됩니다.