2010-04-26 2 views
6

고급 웹 애플리케이션 공유 웹 애플리케이션을 구축 중입니다. 예상대로 사용자는 이미지를 업로드 할 수 있고 다른 사람들은 이미지에 댓글을 달거나 이미지에 투표하거나 좋아할 수 있습니다. 이러한 이벤트는 "카르마"필드에서 캡처하는 이미지의 인기를 결정합니다.인기있는 콘텐츠의 Digg-like 회전 홈페이지, 날짜를 요소로 포함하는 방법?

이제 가장 인기있는 이미지를 보여주는 Digg 형 홈페이지 시스템을 만들고 싶습니다. 이미 가중치가 부여 된 카르마 점수가 있기 때문에 쉽습니다. 20 개의 가장 가치있는 이미지를 보여주기 위해 내림차순으로 정렬합니다.

누락 된 부분은 시간입니다. 매우 인기있는 이미지가 항상 홈페이지에 표시되는 것을 원하지 않습니다. 나는 쉬운 해결책이 결과 세트를 지난 24 시간으로 제한하는 것이라고 생각한다. 그러나 이미지 회전을 하루 종일 계속 유지하려면 오프셋이 이미지의 정렬에 영향을 미치는 경우 일종의 변수가 될 수 있다고 생각합니다.

구체적인 질문 :

  • 당신은 쉽게 시나리오 (24 시간 이내에 그저 최선 이미지) 또는 (정렬의 일환으로 오프셋 사용 날짜) 더 정교한 하나를 추천 하시겠습니까? 당신이 후자를 조언한다면, 이것에 수학적 해결책에 대한 도움이 필요합니까?
  • 예약 된 서비스를 실행하여 홈페이지의 이미지를 표시하는 것이 가장 좋을까요, 아니면 직접 쿼리 할 것입니까 (MySQL을 사용하고 있습니다)
  • 홈페이지는 페이징을 지원해야하며 조용한 환경에서 지원해야합니다 하루는

난 그냥 수 그냥 몇 가지 조언 :

+0

베르누이 수식을 수정하여 매개 변수로 시간을 조정할 수있는 항목을 정렬 할 수 있습니다. 지금 나는 그 이름을 기억하지 못한다. 아마도 누군가는 그렇게 할 것이다. (긴 긴 이름이야) – Ben

답변

2

나는 주어진 시간이 경과 한 후에 각 항목의 "효과적인 카르마"를 줄이는 기능을 사용할 것이다. 이것은 에릭의 방법과 조금 비슷합니다.

얼마나 자주 "효과적인 카르마"를 줄이기를 원하십니까? 그런 다음 카르마에이 기간을 기준으로 배율을 곱하십시오.

effective karma = karma * (1 - percentage_decrease) 

여기서 percentage_decrease은 사용자의 기능에 의해 결정됩니다. 예를 들어, 각 항목의 효과적인 카르마가 24 시간 동안 0으로 감소하도록하려면

percentage_decrease = min(1, number_of_hours_since_posting/24) 

으로 설정할 수 있습니다. 그런 다음 효과적인 카르마를 사용하여 어떤 이미지를 표시할지 결정하십시오. 이것은 게시 이후 시간을 빼는 것보다 안정적인 해결책입니다. 0과 실제 값 사이의 업보를 조정합니다. 1 분이 지나면 1보다 큰 값을 가져 오기 시작하므로 0보다 낮은 배율로 배율을 유지하는 것이 가장 좋습니다.

그러나 엄밀한 의미에서 인기는 고려하지 않습니다. 팀의 대답은 엄격한 인기 (페이지 뷰)를 고려하는 방법에 대한 아이디어를 제공합니다.

0

을 찾고,이 알고리즘을 구축하기 위해 지역 사회를 요구하고 있지 않다 "작성"항상 확인하기 전에 순서 일의 항목을 포함해야한다 시간을 고려해야하는 "조정 된 카르마"유형 필드를 계산하십시오 :

adjusted karma = karma - number of hours/days since posted 

그런 다음 쿼리에서 직접 계산하여 정렬 할 수도 있고, 야간 프로세스 등으로 업데이트하는 데이터베이스의 실제 필드로 만들 수도 있습니다. 개인적으로는 야간 프로세스를 사용하여 업데이트하므로 향후 알고리즘을 좀 더 정교하게 만들 수 있습니다.

1

첫 번째 질문에 대해서는 약간 더 복잡한 방법을 사용하겠습니다. 믹스에서 "모든 시간 즐겨 찾기"를 원할 것입니다. 그러나 혼자서 시간을 보내지 말고, 실제 숫자가 이되고 이미지가 있습니다. 모든 사람이 로그인하고 투표하는 것은 아니지만 이미지가 덜 인기가있는 것은 아닙니다. 2 표본이 10 표, 100 만 표를 가진 이미지는 1 표본이 100 표 및 1k보기 인 이미지보다 사람에게 분명 중요합니다.

두 번째 질문에 대해서는 그렇습니다. 첫 페이지에 어떤 종류의 캐싱이 필요합니다. 그것은 귀하의 사이트에 진입 점을 생성하는 많은 쿼리입니다. 그러나 SO와 마찬가지로 사이트 유형은 검색 엔진을 통해 내부 페이지로 트래픽을 유도하는 경향이 있습니다. 따라서 어디에서나 쿼리를 시도하고 최적화하십시오.

세 번째 질문에 대해 시간 이외의 요소 (보기 수)를 사용하면 항상 전체 동적 페이지를 유지할 수 있습니다. 프론트 페이지의 페이지 매김에 대해 확신하지 못합니다. 사람들을 태그 또는 검색으로 유도하는 것이 더 나은 전략 일 수 있습니다.이것은, 내가 그것을 발견했습니다