인증 서버는 그냥 늘리면 됩니다. 클라이언트에서 접속할 수 있는 인증 서버에 주소 목록도 변경해 주고요. 하지만 데이터베이스 샤드는 이야기가 좀 다릅니다.
예를 들어 기존 데이터베이스 샤드 개수가 총 10개라고 칩시다. John이 로그온 요청을 합니다. 문자열 “John”으로 해시 함수를 실행합니다. 어떤 값 X가 나오면 샤드가 10개이므로 X MOD 10 명령어를 수행하여 샤드 인덱스를 얻습니다.
그런데 샤드 하나를 추가해서 11개가 되었다고 합시다. John이 또 로그온 요청을 합니다. X는 여전히 같습니다만, 문제는 MOD 11을 한 후입니다. 앞의 샤드 인덱스와 다른 값이 될 수도 있습니다.
지금까지 설명한 것은 데이터 구조 알고리즘에서 다루는 해시 테이블(hash table)과 같은 모양새입니다. 해시 테이블에서 각 항목(bucket)은 샤드에 해당합니다. 해시 테이블 알고리즘에서는 항목 개수가 달라지면 기존에 있던 모든 데이터에서 항목 재배치를 합니다. 이를 리해시(rehash)라고 합니다.
마찬가지로 데이터베이스 샤드가 추가되면 기존 레코드를 리해시해 주어야 합니다. 다시 말해서 기존 데이터베이스 샤드에 있던 레코드 중 일부는 다른 샤드로 이동시켜야 합니다.
▲ 그림 10-9 사라질 샤드의 데이터를 다른 샤드로 옮기기