2009-06-03 2 views
20

StackOverflow와 같은 웹 사이트에서는 각 질문에 조회수가 있고 사용자가 질문을 읽었지만 이전에 읽은 적이 있으면 두 번 계산되지 않습니다."조회수"가 가장 잘 구현되는 방법은 무엇입니까?

어떻게 구현되고 어떤 테이블을 사용하는지에 대한 아이디어가 있습니다.

이것을 구현하는 가장 좋은 방법은 무엇이라고 생각하십니까?

답변

10

내가보기에 몇 가지 옵션이 있습니다.

쿠키

당신은 당신에 대해 의견을 기록 각 페이지에 대한 사용자의 브라우저에서 쿠키를 저장할 수 있습니다. 이 쿠키 존재를 확인하고 이미 쿠키가있는 경우보기를 로깅하지 마십시오.

쿠키가 사용되지 않거나 누군가 게임을하려고하면이 기능이 작동하지 않는다는 단점이 있습니다.

더하기 측면에서 잠재적으로 수백만/수십억 개의 테이블 데이터 행의 저장에 대해 걱정할 필요가 없습니다.

데이터베이스는 각 뷰에 대한 기록을 유지. 해당 레코드를 사용자에게 어떤 식 으로든 관련 짓습니다. MemberID, IP 주소; 사용자에게 고유 한 것이어야합니다. IP는 이상적이지는 않지만 사용자가 로그인 할 필요가 없다면 충분합니다. 당신은 예를 들어 다음과 같은 열이있는 테이블을 것 그래서

,

  • 은 articleID (외래 키)
  • 사용자 ID (외래 키)
  • 날짜

날짜가 될 것입니다 두 가지 이유에서 유용합니다.

  • 보고. 각보기가 기록 된 시점을 알면 훨씬 더 우수한 통계를 작성할 수 있습니다.
  • 보기 제한 시간. 예를 들어 시간당 사용자 당보기 하나만 저장할 수 있습니다. 날짜 열이 있으면이 작업을 수행 할 수 있습니다.

응용 프로그램이 이러한 상황에서 인기가있는 경우 저장소 관련 사항을 처리해야합니다. 매일 10 만 개가 넘는 뷰 행이 추가되는 인기있는 Facebook 앱을 운영합니다. 현실적으로 앱이 인기가있어 문제가된다면 다루어야 할 더 큰 문제가 있습니다.

+0

예제 코드가 있습니까? – AminM

1

귀하의 사이트 방문자 대부분이 등록되어있는 경우 이들 중 누구도 두 번 계산되지 않았는지 확인하는 것이 상대적으로 쉽습니다.

안녕하세요. 손님이 전망에 포함 시킬지 잘 모르겠습니다. 나는 내가 점검 할 수있다라고 생각한다. 그러나 그것은 늦었다.

+0

방금 ​​질문을 여러 번 보았고 처음 후에 카운트가 변경되지 않았습니다. –

+1

나는 또한 OP에 의한 견해를 계산하지 않는다고 생각한다. 그래서 질문을 한 다음 견해의 수를 살펴 본다면, 그 질문을 본 사용자 수는 분명하다. –

2

짧은 답변 : 달려 있습니다!

  • 정말로 조회수가 얼마나 정확한지에 달려 있습니다. 한 사람이 2 ~ 3 회 등록 될 수도 있습니까?
  • 데이터를 사용할 대상에 따라 다릅니다. 데이터 (통계, 최신 뷰 목록 등)로 다른 깔끔한 것들을 원한다면 모든 개별 뷰를 데이터베이스에 저장하는 것이 좋습니다. 이것은 거대한 테이블이 될 수 있으므로 구현하기 전에이 작업을 수행해야합니다.

이전에 개인보기를 저장하기 위해 메모리 내 데이터베이스와 결합 된 쿠키를 사용했습니다. 디스크에 저장된 데이터베이스 테이블에 실제보기 횟수를 저장 한 이유는 분명합니다. 나는 통계가 아무 것도 의미하지 않았기 때문에 나는 이것을 할 수 있었다.

0

나는 기능적인 관점에서 대답하려고 노력할 것입니다.

사용자 당 조회수 - 등록 된 사용자의 경우. 익명 사용자의 경우 - 세션 당.

항목을 보는 사람이 아닌 다른 사람이 중요한 업데이트를 한 후 첫 번째보기와 모든보기에서 증분보기 횟수를 계산합니다. 창조의 시간에 포스터의

보기

당신이 너무 그 일을 간단하게 상상할 수에 포함되지해야하지만, 나는 이상적인 솔루션을 생각하려고했습니다.

1

stackoverflow는 주제를보고있는 게스트 (기록되지 않은) 사용자를 계산하지 않습니다. 익명의 사용자 의견 수를 계산할 때의 문제는 귀하의 카운터가 도박을 당할 수 있다는 것입니다. 누군가는 항상 쿠키를 삭제하고 다시 볼 수 있습니다. 보기 로깅은 정확성을위한 가장 안전한 솔루션이지만 테이블의 크기와 게스트/익명 사용자의 부족이라는 두 가지 주요 문제가 있습니다. 스택 오버 플로우가 게스트 (언 로그) 사용자를 로깅하지 않는다는 사실이 놀랍습니다. 나는 대부분의 견해가 구글 검색을하는 이들 사용자들로부터 나온 것이라고 생각한다.

9

내 웹 사이트에서는 게스트 뷰 수를 계산하고 난수를 사용하여 뷰 수를 나누어 생성하는 '데이터의 질량'을 처리합니다.

0에서 1 사이의 분포가 좋은 난수 생성기가 있고 특정 페이지에서 하루에 100,000 개의 뷰를 얻고 있습니다. 모든보기에서 'logView()'함수를 호출하지만 새로운 임의의 숫자를 생성하고 난수가 < 0.001 일 때 DB에 뷰를 기록한 다음 100,000 개의 뷰에 대해서만 DB를 대략적으로 기록합니다 100,000 * 0.001 = 1000 회.

조회수를 반환하려면 내 DB 번호를 같은 값으로 나누면됩니다 (예 : 1000/0.001 = 100,000이다. 이것은 가장 가까운 1000 개의 뷰에 대해 대략적으로 정확합니다.

분명히 사이트의 부하에 따라 임의의 숫자 범위를 선택할 수 있으며로드가 크게 바뀌면 변경됩니다 (저장된 값을 적절하게 수정해야 함).

또한보기가 1000 인 페이지는 조회수가 1 조도되지 않을 수 있지만보기가 100,000 인 페이지가있는 경우 1000이있는 페이지는별로 중요하지 않습니다.

+0

멋진 생각. 공유 주셔서 감사합니다. –

관련 문제