안녕하세요.
게임 쪽 DB 중 현재 PVP (1:1 대결) 관련 개발을 진행중입니다.
간단히 테이블을 설명드리면
arena_rank 라는 테이블에
유저의 Unique ID, 유저 개인 정보(이름 등), 점수, 도전 횟수, 승리 횟수가 있습니다.
이 테이블은 수시로 점수 UPDATE 및 신규 유저 INSERT가 발생하는 부분이구요,
점수 업데이트를 위해 유저 Unique ID에 PK를, 점수에 DESC 인덱스를 걸었습니다.
모든 유저의 랭크를 볼 수 있는 구조를 만들기 위해
1. 화면에 보이는 중복이 가능한 순위 (RANK)
2. 내부적 처리를 위한 ROWNUM ( 랭킹 리스트 스크롤링)
위 두가지가 추가로 필요합니다. (rownum 기준으로 위아래 스크롤링)
하지만 arena_rank 테이블의 컬럼으로 넣기에는 순위 변동등이 발생했을 때 문제가 발생하기 때문에 힘들구요
view 를 생성하여 유저 UniqueId, score, ROW_NUMBER() OVER (ORDER BY score DESC) AS rownum
의 컬럼으로 생성하였습니다.
순위는 score 컬럼에서 조회 요청오면 필요할때마다 계산하려고 합니다.
유저 row 가 백만건 이상이 저장된다고 할 때, 성능상의 문제는 없을까요?
ROW_NUMBER, RANK 계산하는 비용이 무시 할 만한 수준인지가 궁금합니다.
어설프게 알다보니.. 돌아가게 만들 수는 있으나, 성능상 이슈 판단이 안되어 걱정이네요.
DB쪽 선임도, 물어볼데도 없이 저 혼자 작업중입니다.
성능 관련하여 판단할 수 있는 TIP 같은게 있으면 조언 부탁드립니다..
감사합니다