2016-09-07 3 views
1

사용자의 게시물이 댓글과 좋아하는 것, 그리고 만든 날짜로 구성된 경우 가장 높은 게시물의 댓글 및 좋아요 및 날짜를 ​​포함하는 일종의 순위를 어떻게 구현할 수 있습니까? 최저로.모든 사용자의 게시물을 가장 높은 것부터 가장 낮은 것까지

+0

이 데이터 층에 있습니다. 당신은 테이블에 게시물 순위를 추가하고 날짜와 사용자별로 정렬하거나 그룹화 할 수 있습니다. 또한 코드와 특정 문제로 특정 질문을 게시함으로써 SO에서 더 나은 행운을 찾을 수 있습니다. –

답변

2

당신이 찾고있는 것을 Ranked Feeds이라고합니다. 순위가 매겨진 피드는 맞춤 활동 순위를 허용합니다. 자신의 수식을 사용하여 각 활동의 점수를 계산할 수 있습니다. 귀하의 활동에 필요한 정보 (예 : likes_count, comments_count)가있는 한이 정보를 사용하여 피드의 순위를 매길 수 있습니다.

다음은 순위 식의 간단한 예제 :

{ 
    "score": "likes_count + comments_count", 
    "defaults": { 
     "likes_count": 0, 
     "comments_count": 0 
    } 
} 

매우 일반적인 방법은 활동의 나이가 몇 가지 인기 점수를 결합하는 것입니다. 이를 수행하려면 time decay 함수 중 하나를 사용하고 결과에 좋아요와 주석의 합계를 곱하십시오. 예를 들어

:

{ 
    "functions":{ 
    "popularity_gauss":{ 
     "base":"decay_gauss", 
     "scale":"5d", 
     "offset":"1d", 
     "decay":"0.3" 
    } 
    }, 
    "defaults": { 
     "likes_count": 0, 
     "comments_count": 0 
    }, 
    "score":"popularity_gauss(time) * (likes_count + comments_count)" 
} 

예는 스케일 오프셋 및 감쇠 파라미터와 decay_gauss 함수를 사용한다. 선택한 매개 변수를 사용하면 활동이 1 일 임계 값을 초과 할 때 점수가 감소합니다. 5 일 된 활동의 경우 점수가 3 분의 1로 줄어 듭니다.

동기화 데이터

우리가 likes_countcomments_count 명확하게 시간이 지남에 따라 변화하는 예에서 사용 된 두 개의 카운터. 순위가 매겨진 피드가 작동하려면이 값을 동기화해야합니다. 활동 데이터는 using the APIs으로 업데이트 할 수 있습니다.

참고 : 활동 업데이트 API는 부분 업데이트를 지원하지 않으므로 트랜잭션 활동을 업데이트하지 않는 것이 좋습니다 (예 : 사용자가 like -> API 호출을 보내 X에서 X + 1로 카운터 업데이트). X 초마다 대량으로 업데이트됩니다.

crontab 명령 예를 매 5 분 :

*/5 * * * *  /path/to/script/update_activities_counters 
관련 문제