순위표 모범 사례 #

순위표는 게임에서 경쟁하는 경험의 일부라고 할 수 있습니다. Nakama는 순위표 생성, 계산 및 관리를 위한 데이터 모델 및 API를 제공합니다. 이 문서에서는 다음에 대해 설명합니다:

  • 순위표 수명 주기
  • Nakama가 순위표와 개인 점수를 모델링하는 방법
  • 모범 사례로 순위표를 최대한 활용하는 방법

순위표 및 사용 이유 #

Nakama에서 순위표는 실시간 점수 순위입니다. 점수를 규모로 나타낼 수 있으면 순위표에 올릴 수 있습니다. 순위표를 통해 획득한 포인트, 수집한 골드 및 보석과 같이 많을수록 좋은 결과나, 사용된 파워업 또는 경과된 시간(초)과 같은 적을수록 좋은 결과를 추적할 수 있습니다.

순위표는 순위표에 대한 게임 별 수준을 만드는 기반입니다. 메모리 내 캐싱 및 순위 지정 덕분에 효율적으로 저장하고 빠르게 다시 계산할 수 있으며 정렬 가능한 순위표에 대해 충분히 유연합니다.

순위표 수명 주기 #

높은 수준에서 Nakama는 세 부분으로 구성된 수명 주기를 통해 순위표와 점수를 처리합니다.

  1. 시작. 순위표를 만들 때 점수가 높을수록 좋은지 또는 일정에 따라 재설정되는지 여부와 같은 몇 가지 규칙을 선택합니다. 순위표의 이러한 속성은 생성 시 고정되며 순위표가 존재하는 한 동일하게 유지됩니다.

  2. 점수. 플레이가 시작되면 게임에서 순위표에 점수를 채웁니다. 점수가 기록될 때마다 Nakama는 순위표 생성 시 설정된 규칙에 따라 순위를 다시 계산합니다.

    사용자의 애플리케이션은 네 가지 방법을 사용하여 점수를 기록할 수 있습니다.

    • set — 새 점수 삽입
    • best — 새 점수 삽입, 소유자의 이전 점수보다 더 좋은 경우
    • incr — 소유자의 이전 점수에 추가
    • decr — 소유자의 이전 점수에서 차감

    재설정이 예약되지 않은 순위표의 경우 이 단계에서 무기한 계속됩니다.

  3. 만료. 순위표가 예정된 재설정 시간에 도달하면 Nakama는 콜백을 트리거하고 순위에서 만료된 점수를 삭제합니다.

    순위표 만료를 위해 등록된 이벤트 핸들러의 경우, 만료되면 반복이 끝날 때 순위표 상태로 콜백이 트리거됩니다. 예를 들어, 상위 5명의 완료자에게 보상하는 이벤트 핸들러가 트리거됩니다.

    동시에 Nakama는 순위표 순위에서 만료된 점수를 삭제합니다. 만료된 점수는 삭제되지 않지만 더 이상 순위표의 실시간 순위에 포함되지 않습니다. 즉, 순위는 수명 주기의 점수 단계 시작 시 다시 시작됩니다.

순위표 모델링 #

이제 Nakama가 실제로 순위표를 나타내는 방법을 살펴보겠습니다. Nakama에서 순위표는 _순위표_와 다수의 _순위표 레코드_라는 두 부분으로 기록됩니다.

순위표 #

_순위표_를 만들 때 Nakama가 순위를 다시 계산하는 방법, 레코드 만료 여부, 순위표에 새 점수를 삽입하는 의미 체계를 결정하는 몇 가지 변경할 수 없는 속성을 설정합니다.

순위표의 가장 중요한 속성은 다음과 같습니다.

속성설명
ID순위표의 고유 키weekly_best_lap_time
권한 보유 상태클라이언트가 자신의 점수를 삽입할 수 있는지 여부거짓
정렬 순서점수의 오름차순(낮을수록 좋음) 또는 내림차순(높을수록 좋음) 순위asc
연산자최신, 개인 최고 또는 추가와 같은 점수 삽입의 의미이전 점수에 추가하는 incr
최대 점수 수점수 소유자가 순위에 들어갈 수 있는 횟수3
재설정 일정오래된 점수를 만료하기 위한 cron과 같은 일정59 23 * * 0 매주 일요일 종료 시 재설정
JSONB 메타데이터순위표의 메타데이터{ “displayString”: “주간 최고 점수” }

저장소 관점에서, Nakama는 순위표 구성에 대한 권한 있고 영구적인 레코드로 데이터베이스에 순위표 세부 정보를 기록합니다. 한편 Nakama는 실시간 정렬을 위해 순위표의 메모리 내 캐시를 만듭니다.

순위표 레코드 #

_순위표 레코드_는 순위표에 추가된 개별 점수를 캡처합니다.

순위표 레코드의 가장 중요한 속성은 다음과 같습니다:

속성설명
순위표 ID점수와 관련된 순위표weekly_best_lap_time
소유자 ID사용자 또는 그룹과 같은, 점수의 소유자e4f8c28d-1680-4f35-8ccc-67910185d84e
사용자 이름레코드 소유자의 표시 이름anon1234
점수정수로서의 점수70 (초)
부분 점수동점을 깨기 위한 보조 또는 분수 점수54 (100분의 1초)
만료 시간항목이 순위표 순위에서 벗어날 때2021-01-02T23:59:00
JSONB 메타데이터점수에 대한 메타데이터{ “raining”: false }

순위표 자체와 마찬가지로 순위표 레코드는 점수의 표준 레코드인 데이터베이스와 실시간 정렬을 위한 순위표의 Nakama 메모리 내 표현이라는 두 위치에 있습니다.

점수 자체의 순위는 저장소 모델의 일부가 아닙니다. 순위는 빠른 재계산 및 검색을 위해 메모리 내에 유지됩니다.

종합하면 순위표와 순위표 레코드를 통해 빠른 조회, 순위에 대한 빠른 업데이트, 클러스터 전체에 대한 내구성 및 복원력이 가능합니다.

모범 사례 #

이제 Nakama의 순위표를 정의하는 기본적인 방법을 이해했으므로 게임에서 순위표를 사용하기 위한 다음 모범 사례를 생각합니다.

플레이어 이상인 소유자 ID 사용 #

각 순위표 레코드에는 소유자가 있음. 순위표 레코드 소유자의 일반적인 선택은 단일 플레이어를 나타내는 사용자 ID입니다. 그러나 이것은 순위표의 기본적인 기능입니다.

예를 들어, 여러 순위표를 만들고 한 순위표에 플레이어의 성과를 기록하고 다른 순위표에 해당 사용자 그룹의 종합 점수를 기록하여 개인 및 팀 노력에 대한 실시간 순위를 확인할 수 있습니다.

재설정 일정을 사용하여 순위표 반복 #

순위표의 만료 일정에 주의해야 합니다. 주기적으로 새로운 순위표를 만들고 싶을 수도 있습니다. 대부분의 경우 Nakama를 사용하면 편리합니다.

순위표를 새로 만드는 대신 재설정하면 클라이언트 측에서 더 간단한 순위표 계정을 활용할 수 있습니다. 예를 들어, 클라이언트는 개별 최신 시간별 순위표의 ID(및 이와 함께 제공되는 모든 시간대 및 동기화 세부 정보)를 아는 것이 아니라 시간별 순위표의 ID만 알면 됩니다. 또한 관리 콘솔 도구에는 일정 인식 기능이 구축되어 있어 순위표에서 사용하는 데이터를 더 쉽게 관리할 수 있습니다.

버킷으로 구성된 순위표로 대규모 집단 분할 #

시간이 지남에 따라 큰 순위표는 정적이고 이탈될 수 있습니다. 사용자가 게임에 대한 기술과 경험을 얻으면 최고의 점수가 결정되며 최대한의 노력 없이는 거의 변경되지 않습니다. 순위표를 더 작은 집단(임의의 사용자 부분 집합일지라도)으로 세분화하면 순위 회전율과 참여도를 높일 수 있습니다.

전역 순위표를 작게 나누면 사용자의 친구로 전역 순위표를 필터링하는 것과 같은 일부 경우에 좋을 수 있습니다. 그러나 순위표의 부분 집합에 대한 순위를 계산하는 것은 부분 집합의 크기가 증가하는 경우 비용이 매우 많이 들 수 있습니다.

대신, 큰 집단을 _버킷으로 구성된 순위표_라는 별도의 순위표로 나눕니다. 여러 순위표를 만드는 것은 일반적으로 더 큰 순위표를 필터링하는 것보다 성능 특성이 더 좋습니다. 버킷으로 구성된 순위표를 자세히 알아보려면 이 주제에 대한 가이드를 참조하세요.

Related Pages