스마일게이트 인턴 - 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을 한다면
- user1 -> user2 FOLLOW 관계가 있으면
- user1 -> user2에게 해당 date의 RANKING Relation이 존재하는지 확인
- 있으면 like, comment, total score 점수 업데이트.
- 없으면 RANKING Relation 생성 후 점수 업데이트
- FOLLOW 관계가 없으면 랭킹 생성하지 않음.
- user1 -> user2에게 해당 date의 RANKING Relation이 존재하는지 확인
확장성:
- 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을 한다면
- user1 -> user2 FOLLOW 관계
- 있으면 Ranking에 like, comment, total score 점수 업데이트.
- 없으면 랭킹 생성하지 않음.
확장성:
- Feed 등의 친밀도 랭킹이 필요한 곳에서 바로 정렬해 사용할 수 있음.
문제점:
- 하루를 주기로 한다면, 하루가 넘어가는 시점에 batch로 모든 Ranking Relation을 초기화 해줘야함.
- 소통이 없는 user들간의 불필요한 Ranking 관계 형성
** 최종 나의 생각:
- 1번과 2번중에 확장성을 생각한다면 feed에 친밀도를 반영하는게 나으므로 2번이 좋을 듯 함.
- 2번 방법을 쓰게 된다면 Ranking을 굳이 만들어 줘야 할 필요가 있을까?가 의문. Follow 관계에서 property에 점수를 추가하면 Ranking Relation을 또 만들지 않고 더 좋지 않을까..?