2012-05-08 1 views
0

내가 찾고있는 것은 팔로어/팔로우 시스템입니다. 단순히 사용자를 따라하는 대신 공유하는 콘텐츠 섹션을 따라 다니는 것입니다. 마치 당신이 사람들보다 Twitter의 "목록"또는 그룹을 따르고있는 것처럼 거의. 이 기능을 사용하면 사용자가 공유하는 모든 항목을 팔로우/언 폴링하거나 원하는 목록을 팔로우/언 폴링 할 수 있습니다.그룹 또는 목록에 대한 데이터베이스 스키마 따르기/취소하기

예 # 1 : 나는 사용자 # 1의 목록을 수행하지만, 정치에 대한 하나의 팔로우를 취소하기 위해 "모든 따라"버튼을 클릭합니다. 이제는 하나의 목록을 제외한 모든 내용을 공유하고 있습니다. 나는 그 (것)들의 추종자이다.

예 # 2 : 내가 대신 "모두 따라"버튼을 클릭의 한 사용자 # 2의 목록을 따릅니다. 나는 오직 하나의 목록 만보아야하며 모든 목록은 보지 말아야한다.

간단한 후속/후속 시스템 용 구조는 user_id => follower_id 스키마가있는 테이블 일 수 있지만 그 사용자가 작성한 새 목록을 고려하지는 않습니다.

질문 : 어떤 데이터베이스 스키마가 가장 적합할까요?

+1

당신은 추종자를 저장하는 기본 연결 테이블 이외에 다음과 같은 몇 가지 종류의 메타 시스템이 필요합니다. 게시/구독자 설정. 그러면 팔로워 => 게시자를 저장할 수 있습니다. 게시자가 새 목록을 추가하면 해당 메타 테이블의 팔로어 세트에 메시지를 브로드 캐스팅하고 해당 메타 테이블에 가입 한 모든 팔로어에 대해 새 행을 만듭니다. – PorridgeBear

+0

@PorridgeBear 나는 그것에 대해 생각했지만 더 간단한 솔루션이 있어야만하는 것처럼 보입니다 ... – stwhite

답변

2

내가 user_id => follower_id

유일한의 매핑이 도우미 표는 점이다 알려 것입니다 헬퍼 테이블 list_id => follower_id의 매핑으로 생각 것, 그것을 단순화하고 그 규모 도움 사용자가 새 목록을 만들면 어떤 매핑을 생성해야하는지 알 수 있습니다 (list_id => follower_id). 그것은 기본적으로 추종자에 대한 설정으로 사용됩니다. (예 : X 사용자의 새 목록을 자동으로 따르십시오)

피드를 팔로워에게 표시하면 list_id => follower_id지도가있는 테이블 만 액세스하게됩니다. user_id => follower_id 매핑을 찾아 볼 필요조차 없습니다. 새로운 목록이 만들어 질 때만 재생됩니다.

여기서 가장 큰 문제는 팔로어가 "모두 팔로우"/ "팔로우 사용자"라고 처음으로 말하는 경우를 처리해야한다는 것입니다. 이 경우 해당 사용자에 대해 이미 존재하는 목록을 기반으로 모든 list_id => follower_id 매핑을 백필합니다. (트위터가 다음 모델을 처리하는 방법과 비슷하다고 생각합니다. 내가 누군가를 따라 가기 시작하면 X 트윗을 백필로 채우고 언 폴로우하면 가장 최근의 트윗을 X 개 제거합니다)

사용자가 목록을 제외하기를 원한다면 그 특정 목록에 대한 매핑을 해당 추종자에게만 제거하면됩니다. 이 경우 user_id => follower_id의 매핑을 남겨 둘 수 있습니다. 사용자가 팔로어를 표시하기 위해 만든 새 목록을 원한다고 가정하기 때문입니다.

+1

추종자로 계산하려는 경우 추종자가 추종자가 될 경우 'user_id => follower_id'를 만들 수 있습니다 사용자 목록의 auto_follow가 true 또는 false 인 추가 필드를 추가합니다. 그런 다음 사용자가 새 목록을 만들 때 auto_follow를 true로 설정 한 모든 팔로워를 찾아서 그 시점에'list_id => follower_id' 매핑을 삽입하십시오. – peteynorge

+0

나는 그것이 괴물 크기 테이블이 될 시점이 어떨지 궁금합니다. 100k 사용자 @ 10이 조각을 나열하고 평균 100 명을 따르는 경우에도 1 톤의 행이있는 것으로 보입니다. – stwhite

+0

네, 많은 양의 데이터가 될 수 있지만 스토리지는 저렴합니다. 그리고 100,000 명의 액티브 사용자가 있다면 더 많은 스토리지를 구입하기 위해 자금을 얻을 수 있습니다.이 디자인의 가장 중요한 부분은 읽기가 빠르다는 것을 확인하는 것입니다 더 많은 데이터를 저장한다는 의미입니다. 이 접근법의 좋은 점은 읽기는 기본적으로 백만 명의 사용자와 마찬가지로 한 명의 사용자와 마찬가지로 빠르며 스키마는 간단해야한다는 것입니다. 어느 쪽이든, 이것이 도움이되기를 바랍니다. 나는 다른 아이디어가 없다. 우리는 우리 제품과 비슷한 다음 전략을 사용하지만 비 관계형 데이터베이스를 사용하므로 MySQL에 정확하게 적용되지 않을 수 있습니다. – peteynorge

관련 문제