샤드가 2개면 그림 10-13과 같이 되겠네요.
▲ 그림 10-13 샤드 1이 가진 해시 항목들을 샤드 2에 분배
이 상태로 서버를 켰다고 가정합시다. 그리고 잘 돌아갑니다. 레코드들도 각 샤드에 쌓였습니다. 그런데 샤드를 하나 더 늘려야 하는 상황이 되었습니다. 이미 샤드 1·2에는 레코드가 많이 들어 있으므로 이때는 기존 샤드가 맡던 해시 값 범위 일부를 나누어 가지면 됩니다. 샤드 2가 맡던 범위 일부를 샤드 3에 나누어 줍시다.
▲ 그림 10-14 샤드 2가 가진 해시 항목들을 샤드 3에 분배
그림 10-14와 같이 샤드 2가 가진 레코드 일부를 샤드 3에 옮겨 주면 됩니다. 샤드 3이 담당할 해시 값 범위에 대응하는 레코드에서만 말이죠. 여기서 또 샤드를 추가하면 어떻게 될까요? 그때는 샤드 1의 일부를 샤드 4에 나누어 주면 됩니다.
▲ 그림 10-15 샤드 1이 가진 해시 항목들을 샤드 4에 분배
정리하자면, 샤드가 추가될 때마다 기존 샤드 중 하나가 담당하던 해시 값의 범위가 나누어집니다. 이렇게 함으로써 샤드가 추가될 때 모든 레코드가 아닌 일부 레코드에만 리해시에 준하는 일을 해 주면 됩니다.
Tip
샤드를 줄일 때는 이 과정과 반대로 하면 됩니다. 제거될 샤드가 가진 레코드를 인접한 다른 샤드에 나누어 줍니다.