2009-09-28 7 views
2

특정 페이지에 대한 페이지 뷰 (특별히 유니크)를 추적하는 가장 좋은 방법은 무엇입니까?고유 한 페이지 뷰 추적

예 : 포럼의 스레드, 비디오 웹 사이트의 비디오, Q/A 스크립트 (SO)의 질문.

현재 뷰를 계산하려고하는 각 행에 대한 간단한 "Views"열의 접근 방식을 취하고 있습니다. 그러나 이것이 가장 효율적인 방법은 아닙니다.

고유보기의 경우 "QuestionID"및 "UserID"행이있는 개별 테이블이 있습니다. 사용자가 질문/페이지를 방문하면 내 코드는 "UserID"및 "QuestionID"를 사용하여보기 테이블에서 행을 찾은 다음 행을 추가 한 다음 행을 추가 한 다음 해당 행의 Question 값을 증가시킵니다. "질문"표.

답변

1

저장 솔루션은 사용자를 추적하는 가장 좋은 방법 인 것 같습니다. 테이블에는 중복 데이터가 없으며 다 대다 관계는 자체 테이블로 표시됩니다.

다른 노트 : 익명 사용자의 경우 자신의 IP 주소를 기록해야하며 COUNT() SQL 함수를 사용하여 순 방문자 수를 얻을 수 있지만 IP 주소는 "고유하지 않음" "그 자체.

1

우선 userid-quesitonid 쌍을 저장하는 테이블이있을 때, 뷰 열을 추가하면 가정 할 정규화 규칙에 위배된다는 것을 의미합니다.

다른 점은 쿠키 솔루션을 구현하지 않으면 원하는만큼 F5를 수행 할 수 있다는 것입니다. 그렇지 않으면 테이블에 행을 추가하십시오.

IP 주소 해결책에 관해서는, 해결책 인 훨씬 형태이다, 그것은 라우터 뒤에 사람들을 blcok 것이다.

등록 된 사용자의 쿠키, sessionIds, DB 테이블을 확인하는 솔루션을 생각해보십시오. (아직 구현 중입니다.) 발견되지 않은 경우 테이블에 행을 추가합니다. Itr은 또한 SessionID와 IP 주소를 기록하지만 어쨌든 실제로는 사용하지 않습니다.

0

익명 사용자에 대해 ASP.NET MEmbership과 익명 공급자를 사용하는 경우 각 익명 사용자는 Profile.Save()를 말하자마자 aspnet_Users 테이블에 만들어진 행을 가져옵니다. 이 경우 특정 페이지를 보는 비 사용자 및 등록 사용자를 모두 추적 할 수 있습니다. aspnet_user의 UserID와 QuestionID를 기록하면됩니다.

그러나 데이터베이스를 폭파 할 수 있으므로 데이터베이스 수준에서이 작업을 수행하지 않는 것이 좋습니다. 10,000 개의 질문과 1,000 명의 등록 된 사용자와 100,000 명의 익명 사용자가 있고 각 사용자가 평균 10 개의 질문을 방문한다고 가정하면 추적 테이블에 1M 개의 행이 생깁니다. 꽤 약간의 짐.

또한 추적 테이블에서 SELECT COUNT()를 수행하면 데이터베이스에 상당한 부하가 발생합니다. 특히 포럼에서 거의 모든 페이지 뷰를 수행하고 있습니다. 가장 좋은 점은 각 질문에 대해 전체 카운터를 질문 테이블에 보관하는 것입니다. 고유 한 사용자가 페이지를 볼 때마다 카운터를 늘리면됩니다.

또한 추적 테이블에서 사용자 테이블에 대해 FK 관계를 만들지 마십시오. aspnet_users 테이블을 정리해야합니다. 시간이 지남에 따라 많은 익명 사용자가 쌓여서 다시 오지 않을 것입니다. 따라서 추적 페이지에는 userID 필드 만 있고 FK는 필요하지 않습니다. 또한 시간이 지남에 따라 추적 테이블을 정리해야 할뿐만 아니라 수백만 행이 계속 유지됩니다. 이것이 TotalView 카운터가 Question 테이블에 있어야하고 SELECT COUNT()를 사용하여 페이지를 표시하는 동안 뷰의 수를 계산하지 않아야하는 이유입니다.

귀하의 질문에 대한 답변이 있습니까?

+0

이 답변으로 도움이 되었습니까? – oazabir