리더 보드에 Azure 테이블 저장소를 사용하는 게임을 만들고 싶습니다.Azure 테이블 저장소를 사용하는 게임의 경우 점수 + GUID를 RowKey로 사용
Azure Table Storage에서 정렬 된/페이지 된 목록을 표시하려면 내 테이블 엔티티의 RowKey로 점수를 사용해야합니다. (I 각 생성 RowKey이 고유한지 확인하기 위해 플레이어 GUID를 추가하기 위하여려고하고있다.) 여기
이 추천 내 관심사 :다른 선수 (을 감소 같은) 선수의 점수에 영향을 미칠 수 따라서 동시성 문제가 고려 될 수 있습니다. 게임 클라이언트가 플레이어의 점수를 업데이트하려고 시도하고 이전 점수를 사용하여 테이블 엔티티를 검색하면 다른 클라이언트가 이미이를 업데이트 한 경우 해당 행을 찾지 못할 수도 있습니다.
플레이어 이름과 같은 테이블 엔티티 (파티션 + 속성)를 검색하기 위해 다른 필드를 사용하는 경우 쿼리가 최적이되지 않습니다.
행 업데이트를 수행하는 더 나은 방법은 무엇입니까? 잠금 기술을 사용하고 RowKey로 검색해야합니까? 아니면 사용자 이름을 사용하여 검색합니까?
또는 점수를 RowKey로 사용하고 전체 테이블을 검색 한 후 리더 보드에 페이지를 표시 한 후 메모리에서 정렬하는 아이디어를 포기해야합니까?
순간적으로 점수 업데이트와 리더 보드보기가 똑같이 빈번하다고 가정합니다.
재시도주기 내 첫 번째 작업으로 Partition + Attribute 쿼리를 사용한 다음 해당 블록 내에서 업데이트를 수행합니다. 어떤 이유로 든 실패하면 동일한 쿼리를 사용하여 엔티티를 다시 가져옵니다. 재 시도 횟수 후에 종료됩니다. 효율적이지는 않지만 Azure Queue + 적어도 하나의 기본 인스턴스가 필요한 지속적으로 실행되는 단일 Webjob과 같은 싱글 톤 솔루션을 사용하지 않고 생각할 수있는 유일한 방법입니다. –