실시간 랭킹 추가정보 구현관련 질문

안녕하세요. 실시간 랭킹 구현중 질문이있습니다.

실시간 랭킹에 있는 유저의 게임 플레이 정보를 추가로 보여주려고합니다. ( 카드덱과 같은 추가정보 )

우선 실시간 랭킹은 Private 테이블에 Score 컬럼으로 관리하고,
추가 정보는 Public 테이블에 기록하여 다른 유저들에게 제공하려고합니다.
스테이지 종료 후 결과로 실시간 랭킹을 먼저 업데이트하고, Public 테이블을 업데이트 하고있습니다.

  1. 두가지 작업을 동기화하기 위하여 Transaction을 진행하는 방법은 없는지 궁금합니다.
  2. 만약 없다면 제가 생각한 방법은 Public 테이블에도 랭킹 점수를 기록 한 후,
    Public 테이블과 랭킹 테이블의 점수가 다르다면 랭킹을 동기화 하는 방법을 생각하고있습니다.
    그런데 이렇게 하면 실시간 랭킹이 기간마다 초기화 되는 경우,
    Public 테이블의 정보를 동시에 초기화 시키는 방법을 모르겠습니다.

안녕하세요 개발자님,
문의하신 내용에 답변드립니다.

  1. Treansaction을 통한 진행은 불가합니다.
  2. 랭킹의 주체를 public이 아닌 private으로 잡으면 해결될 것 같습니다.
    실시간 랭킹이 존재하면 public 테이블을 읽어오고, 존재하지 않다면 public 테이블도 읽어오지 않기에
    이와 같이 진행하면 별도의 초기화도 필요하지 않을 것으로 보입니다.

감사합니다.

안녕하세요. 답변감사합니다.

추가질문 좀 드리겠습니다.

  1. 실시간 랭킹이 초기화되는 경우 모든 유저의 점수가 0점이 되는지 테이블에서 제거가 되는지 궁금합니다.
  2. 향후 업데이트 계획에 제가 실시간랭킹을 수동으로 원하는때(업데이트 시점) 초기화시킬수있는지 궁금합니다.
  1. 실시간 랭킹 초기화시 점수 초기화 및 테이블 제거는 이루어지지 않고 있습니다.
    데이터 갱신을 통해 새로 랭킹이 등재되며,
    2021년 1분기에 랭킹 초기화시 데이터가 초기화 되는 등 대폭 개선 될 예정에 있습니다.

  2. 랭킹 초기화는 수동으로 제공할 예정은 없으며, 랭킹 운용기간을 설정할 수 있도록 업데이트 될 예정입니다.

감사합니다.

예를들어 100점의 점수를 가지고있는 유저를 UpdateRTRankTable 함수로 실행시 실시간랭킹에 100점이 등록됨과 동시에 게임정보 테이블 값이 변경됩니다.

시간이 지나서 랭킹이 초기화된다면, 실시간 랭킹의 데이터가 모두 소멸이되지만 게임정보 테이블 값은 그대로 남아있다는 것인가요?

네, 맞습니다.
현재는 말씀해 주신 바와 같이 운영되고 있습니다.

위 답변드린 것처럼 2021년 1분기 중 많은 개선을 준비하고 있는 점 참고 부탁드리겠습니다.

제가 하려고하는 것을 설명드리겠습니다.
위에서 말한대로 두 점수를 동기화 하고 싶습니다.

기존에 50점의 점수를 실시간 랭킹에 등록한 유저가 있다고하겠습니다.
모든 유저에게 제공하는 랭킹순위에는 점수뿐만 아니라 추가정보(스테이지 클리어 정보들) 이 제공될 예정입니다.

실시간 랭킹은 추가 정보를 지원하지 않으므로, 새로운 Public Table 에 추가정보를 제공하여야 합니다. (다른 유저가 읽어올 수 있도록)

이제 기존의 유저가 새게임을 시작하고 100점의 점수를 얻었다고 하겠습니다.
실시간 랭킹과 Public Table 에 동시에 작업을 진행할수 없다고 하셨으니 (Transaction 불가)
따로 서버 요청을 처리해야 합니다.

그런데 첫번째 작업이 일어난 직후 게임이 비정상종료된경우,
랭킹 테이블과 Public Table 의 데이터가 일치하지않습니다.

이 경우 다음 번 로그인할때 Public Table 의 값과 랭킹값을 비교하여 랭킹을 업데이트 해줄 예정입니다.

그런데 시간이 지나 랭킹이 초기화 되는 시점을 살펴보면,
이 유저가 로그인했을때 Public Table 에는 마지막 랭킹값이 남아 있을것이고 (게임정보는 초기화되지 않음)
랭킹은 초기화되었으니 당연히 값이 없을 것입니다.
그러면 초기화 되자마자 바로 이전의 랭킹 값으로 수정될것이고 랭킹 초기화가 의미가 없어질 것입니다.

이점을 처음에 질문하였고, 답변해주신 내용은
" 로그인시 랭킹에 데이터가 있는지 없는지 먼저 확인하고 (초기화 된 경우 랭킹데이터가 사라지기때문에)
랭킹 데이터가 없다면 Public Table 에 있는 정보도 초기화 시켜준다. "
제가 이해한게 정확한지 궁금합니다.

안녕하세요 개발자님

결론부터 말씀드리면 현재 랭킹의 경우 여러 개발사들의 의견을 종합하여 실시간 기반의 랭킹을 새로 개발하는 중 입니다.

거기에는 원하시는 기능

  • 랭킹 초기화 시 점수 초기화
  • 랭킹을 조회할 때 추가 항목을 함께 노출
    (랭킹과 함께 노출시키고 싶은 데이터 컬럼 1개)

가 포함되어 있습니다.

새로운 랭킹은 21년 1분기 내 출시 될 예정이고, 해당 랭킹의 개선된 기능은 개발 중 변경될 수 있어 정확히 어떤 것인지 말씀드리기 힘드나

위에 말씀드린 2가지는 포함될 예정입니다.


현재 실시간 랭킹을 기준으로 추가 정보를 노출시킬 때 랭킹이 초기화 될 경우

  1. 로그인 혹은 게임 초기화 시 랭킹 정보를 읽어오고 랭킹에 등재가 안되어 있을 경우 public 테이블 초기화

  2. 랭킹에 등재가 안되어 있으면 어차피 해당 유저의 public 테이블도 읽을 필요가 없으므로 public 테이블도 그대로 놔두고,
    해당 유저가 새로 랭킹을 갱신할 때 public 테이블을 함께 갱신

하는 방법이 있을 것 같습니다.


또한 추가정보의 내용 불일치 문제를 말씀해주셨는데요,

이 경우 개발자님께서 어떤 것에 더 중요도를 두고 있는지에 따라 개발 방향이 바뀔 수 있으나,

랭킹에 등재된 점수 보다는 추가항목이 더 중요하다고 여기실 경우

이해하신 그대로 로직을 개발하시면 될 것 같습니다.

좋아요 2

답변 감사합니다. 이해했습니다. ^^

좋아요 1