답변:
뷰를 기록하는 것은 매우 간단합니다. 간단히 "보기"조치를 나타내는 행을 테이블에 추가하십시오. 데이터베이스에는 잠금이 필요하지 않기 때문에 빠릅니다. 힙 끝에 행을 추가하기 만하면됩니다.
이를 총 뷰 수로 집계하려면 SELECT COUNT(*) FROM ...
계산이 진행되는 동안 테이블을 잠 가야한다는 것을 의미합니다. 또는 UPDATE ... SET num_views = num_views + 1
누군가 특정 행을 볼 때마다 해당 행을 잠그도록 요구합니다.
따라서 확장 성의 관점에서 누군가가 비디오를 볼 때마다 행을 추가 한 다음 SELECT COUNT(*) FROM ...
10 분마다 행하는 것이 훨씬 더 효율적 입니다.
실제로 유튜브의 구조를 알고, 또는 심지어 자신의 데이터를 저장하는 관계형 데이터베이스를 사용하는지 여부가 없습니다, 그러나 무엇이든 할 사용을 원칙 가능성이 동일합니다 : 삽입 데이터를 저렴이며, 값을 집계하는 (상대적으로) 비싼 .
num_views = num_views + 1
하지 않은 다른 종류의 항목을 보여주는 그래프를 생성 할 수도 있습니다 .
대규모 사이트를 확장하려면 여러 단계에서 캐싱을 수행해야합니다. 페이지 캐싱, 하위 페이지 캐싱 및 / 또는 레코드 캐싱 일 수 있습니다. 당신은 그들 모두의 효과를 조합했을 수 있습니다. 예를 들어, 새로운 댓글이 추가 될 때까지 youtube 페이지가 캐시되면 누군가가 댓글을 게시 할 때까지 약간의 지연이 나타납니다.
페이지 조회수를 측정하는 방법에는 여러 가지가 있습니다.
위의 항목 중 하나의 옵션을 제외한 모든 항목은 업데이트가 일괄 적으로 수행됨을 나타냅니다. 조회수는 실제로 시간 결정적인 속성이 아니므로 괜찮습니다. 그러나 백엔드 데이터베이스를 유지할 수 없기 때문에 사람들이 YouTube에서 비디오를 기다리도록하는 것은 시간이 매우 중요한 작업입니다. 즉, 데이터베이스의 열을 업데이트해도 YouTube만큼 큰 사이트에서는 작동하지 않습니다. 그들이 최종 옵션을 선택했다면 개인적으로 놀라지 않을 것입니다. 웹 서버는 사용중인 IP, 페이지 참조 방법 등을 포함하여 모든 방문에 대한 전체 정보를 기록합니다. 이러한 정보를 일괄 처리하고 필요에 따라 결과를 요약하는 것이 좋습니다.