몇일 전 어떤 글에서 실시간으로 랭킹을 처리하는 곳을 보았다고 합니다.
그 후 구현 방법에 대한 아이디어가 떠올라 이렇게 몇자 적어봅니다.
내용을 보시고 오류나 개선사항이 있으시면 댓글 바랍니다.

[ 전제 조건 ]

  • 랭킹의 기준이 되는 수치를 X이라 할 때 X의 값은 증가만 한다.
  • 랭킹을 위한 데이타베이스를 별도로 둔다.
  • X의 값은 동시에 수정될 수 없다.

[ 구현 ]

  • 유저 U의 X 값이 변경될 때, 변경되기 전 X의 값을 Xo라하고 변경된 후 X의 값을 Xn이라 하자. 이 때 Xo < Xn이 성립된다.
  • Xn 이상의 값을 가진 유저 그룹을 Ua, Xo 이상 Xn 미만의 값을 가진 유저 그룹을 Um, Xo 미만의 값을 가진 유저 그룹을 Ub이라 할 때 각 그룹의 랭킹과 자신의 랭킹은 다음과 같다.
    Ua 그룹은 랭킹의 변화가 없다.
    Um 그룹은 현재 랭킹 + 1이다.
    Ub 그룹은 랭킹의 변화가 없다.
  • 유저 U의 랭킹은 다음과 같다.
    U라는 유저의 랭킹은 Xn을 가진 유저의 랭킹과 동일하다.
    U라는 유저의 랭킹은 Xn 초과 값 중 가장 작은 값을 가진 유저의 수와 랭킹을 N, Xa라 할 때
        N이 0이면 U의 랭킹은 1이며
        N이 0이 아니면 U의 랭킹은 Xa + N이다.

 

이 게시물을..