기록하는 습관

[실시간 랭킹] 실시간 랭킹 프로세스 정리 및 생각 본문

스마일게이트 인턴 - Dev Camp

[실시간 랭킹] 실시간 랭킹 프로세스 정리 및 생각

로그뉴 2021. 1. 26. 01:18

실시간 랭킹 업데이트 프로세스

 

** user1 -> user2 Ranking 관계를 여러 개 둘 경우

Ranking { score: 최종 점수, like: 좋아요 개수, comment: 댓글 개수, follow: follow 여부, date: 날짜 }

  • like, comment, 개수를 넣은 이유는 total 점수 뿐만 아니라, 나중에 like, comment 별로도 실시간랭킹을 줄 수 있게 하기 위해.

 

< 프로세스 >

User1 -> user2 에게 like, comment action을 한다면

  1. user1 -> user2 FOLLOW 관계가 있으면
    1. user1 -> user2에게 해당 date RANKING Relation이 존재하는지 확인
      1. 있으면 like, comment, total score 점수 업데이트.
      2. 없으면 RANKING Relation 생성 후 점수 업데이트
    2. FOLLOW 관계가 없으면 랭킹 생성하지 않음.

확장성:

  • 1일마다 랭킹 데이터가 쌓이기 때문에 실시간 랭킹 변화 그래프를 보여줄 수 있음.

장점:

  • 소통이 없는 친구들간의 불필요한 Ranking Relation을 형성하지 않아도 됨.

문제점:

  • Follow 관계에 있는 유저이지만 Ranking Relation이 없을 수도 있음.(like, comment action을 하지 않는 이상) 이렇게 되면 feed에 친밀도 순으로 정렬을 하기가 어려워짐.
  • DB 용량을 생각해 일정 주기(ex: 3개월)마다 Ranking Relation을 지워줘야 함.

 

** user1 -> user2 Ranking 관계를 한 개 둘 경우

가정) user1, user2 follow를 맺을 때 RANKING 관계를 생성하고, unfollow 할 때 RANKING관계를 삭제한다. -> 이럴 경우 Ranking Relation follow property를 굳이 두지 않아도 됨.

Ranking { score: 최종 점수, like: 좋아요 개수, comment: 댓글 개수 }

 

< 프로세스 >

User1 -> user2 에게 like, comment action을 한다면

  1. user1 -> user2 FOLLOW 관계
    1. 있으면 Ranking like, comment, total score 점수 업데이트.
    2. 없으면 랭킹 생성하지 않음.

확장성:

  • Feed 등의 친밀도 랭킹이 필요한 곳에서 바로 정렬해 사용할 수 있음.

문제점:

  • 하루를 주기로 한다면, 하루가 넘어가는 시점에 batch로 모든 Ranking Relation을 초기화 해줘야함.
  • 소통이 없는 user들간의 불필요한 Ranking 관계 형성

 

** 최종 나의 생각:

  • 1번과 2번중에 확장성을 생각한다면 feed에 친밀도를 반영하는게 나으므로 2번이 좋을 듯 함.
  • 2번 방법을 쓰게 된다면 Ranking을 굳이 만들어 줘야 할 필요가 있을까?가 의문. Follow 관계에서 property에 점수를 추가하면 Ranking Relation을 또 만들지 않고 더 좋지 않을까..?
Comments