데이터 베이스를 물리적으로 쪼개는 기술을 말한다. 하나의 게임 서버 데이터를 단일 데이터베이스를 통한 관리가 아닌, 여러 데이터베이스를 통해 관리를 하는 방식을 말한다. 각 shard는 독립적으로 관리되어 데이터베이스의 전체 크기와 처리 능력을 분산시킨다.
const shardNo = playerId % NUM_OF_SHARDS
많은 connection을 준비시킬 수 있어서 CCU(Concurrent connected User) 동시 접속자들이 늘어나는 상황에서도 가용할 수 있는 리소스가 많기에 지장없이 핸들링 가능
성능 향상
데이터를 여러 샤드에 분산하여 병렬적 요청 처리를 통해 성능 향상
Consistent hashing 기법을 활용한 균등한 샤딩
다양한 sharding 전략: 데이터베이스 특성 및 요구사항에 따라 상이하게 적용된다.이 적용될 수 있습니다.
해시 함수는 해시 테이블을 통한 빠른 데이터 검색과 효율적인 구조로 저장을 가능하게 한다.
이러한 해시함수에 있어서,
key값이 달라도 동일한 hash값이 나오는 경우인 Hash Collision
이 발생하거나,
동일한 키 입력 시 항상 동일한 해시 값이 생성되는 특징을 가진다.
shard의 개수를 줄이는 상황을 가정하자. 이 때, 데이터 이동을 하지 않으면 기존 유저들은 잘못된 데이터베이스 shard에 접근하게 되는 상황이 발생할 수 있다.
이러한 식의 샤드의 총 개수가 자주 변경이 될 일은 없으나, 변경이 이루어질 때마다
- 해시 값의 균등한 분포
- 기존의 해싱 결과가 영향받지 않음
두 가지의 이슈를 감안해야 한다.
이러한 이슈를 위해, Consistent Hashing
기법을 통해 어느 정도 보완할 수 있다.
sharding된 환경에서 transaction을 적용한다는 것은 상당히 어려운 부분이다.