2012-05-25 3 views
0

Digg와 같은 웹 사이트의 경우. 누군가가 기사를 좋아할 때 MYSQL을 사용하여 어떻게 추적 할 수 있습니까?MYSQL을 사용하여 사용자가 좋아하는 것을 추적하는 방법

좋아요 수를 추적하는 것만 큼 간단합니다. 내가 이해하지 못하는 부분은 어떻게해야합니까? 1. 사용자가 한 번만 투표하고 다른 사용자는 만 투표하도록하십시오. 2. 사용자가 자신의 프로필을 클릭하여 좋아하는 이야기를 볼 수있게하십시오.

쉼표로 구분 된 사용자 이름을 추가하는 이야기 정보가 포함 된 표가 있습니까? 스토리를 좋아하는 사람을 추적 할 수는 있지만 데이터가 거대해질 수 있습니다. 특히 100,000 명 이상의 사용자가있는 digg와 같은 웹 사이트의 경우. 사용자가 좋아하는 모든 이야기를 사용자가 보도록 허용 하시겠습니까?

감사합니다.

답변

1

각각에 대해 행이 필요합니다. 쉼표로 구분 된 목록을 사용하지 마십시오.


어떻게 1 만 사용자 ID를은 articleID에 고유 인덱스를 생성 한 번

뭔가 투표에서 사용자를 유지합니다.


그리고이 방법은 사용자들이 좋아하는 모든 이야기를 볼 수 있도록 것인가?


SELECT articleid FROM likes WHERE userid = 42 
하지만 데이터는

예, 그것은 거대한 얻을 수있는 큰 얻을 것입니다. 대부분의 웹 사이트는 단 하나의 데이터베이스에 쉽게 대처할 수 있습니다. 매우 큰 웹 사이트는 여러 컴퓨터에 데이터를 저장하기 위해 클러스터를 사용해야합니다. 응용 프로그램이 데이터를 찾을 서버를 알 수 있도록 데이터를 분할해야합니다.

0

소셜 네트워크에서는 요즘 그래프 데이터 구조와 같습니다. 사람, 사진, 비디오, 상태 업데이트, 주석 등의 모든 엔티티가 그래프의 노드이며 좋아하는 경우 괘격은 두 노드 간의 연결입니다.

이상적으로 좋아요를 추가 할 곳은 좋아요에 대한 표가있는 것이 이상적입니다. 좋아하는 사용자를 저장하고 열 및 기타 정보를 좋아할만한 사용자를 저장합니다.

복잡한 소셜 네트워크는 그 이상의 역할을 수행합니다.

0

좋아하는 항목을 story_likes라는 별도의 표에 story_id와 user_id의 두 열로 저장할 수 있습니다.

1) 이러한 조합이 고유해야한다는 제약 조건을 데이터베이스에 넣습니다. 그렇게하면 사용자는 한 번만 이야기를 좋아할 수 있습니다.
2) 사용자가이 테이블에서 좋아하는 스토리를 가져 와서 가지고있는 스토리 ID를 사용하여 다른 스토리 세부 정보를 가져올 수 있습니다. 100,000 개의 행은 MYSQL 데이터베이스에 비해 크지 않습니다.

state = ENUM ('LIKED', 'DISLIKED')에 대한 열을 지정하여 사용자가 기사를 싫어하게 할 수도 있습니다.

관련 문제