더북(TheBook)

키는 쓰기 작업에 수반되는 문제를 회피하는 데 도움이 된다

이제 어떻게 해시 함수가 반환한 숫자를 사용해서 값이 저장된 위치와 매핑되는지 살펴보자. 논의를 간단히 하기 위해 해시 함수가 반환한 숫자를 사용하는 데 초점을 두고, 클러스터에 있는 서버 중 어떤 서버를 사용해서 키와 연관된 값을 저장해야 할지 결정하자. 실제로 키-값을 구현할 때는 디스크나 메모리의 위치와 매핑해야 하지만 이에 대한 설명은 여기서 다루는 범위를 넘어선다.

그림 3-10처럼 서버 여덟 대로 구성된 클러스터에서 작업한다고 가정해 보자. 여기에서는 해시 함수가 숫자를 반환한다는 사실을 이용할 수 있다. 쓰기 작업의 부하는 서버 여덟 대에 고르게 분산되어야 하므로 모든 쓰기 작업을 8로 나누어 각 서버에 전송할 수 있다. 서버1에 첫 번째 쓰기 작업을 전송하고, 두 번째 쓰기 작업은 서버 2에, 세 번째는 서버 3에 전송하는 라운드 로빈 방식으로 작업을 보낼 수 있다. 하지만 이러한 방식은 해시 값을 이용한 것이 아니다.

해시 값을 이용하는 한 가지 방법은 해시 값을 서버 수로 나누는 것이다. 가끔은 해시 값이 서버 수로 균등하게 나뉘어질 때도 있다. 여기서는 해시 함수가 16진수가 아닌 실수를 반환되며 이 실수의 각 자릿수는 고정되지 않았다고 가정한다.

해시 함수가 32를 반환하고 이를 8로 나누면 나머지는 0이 된다. 해시 함수가 41을 반환하고 이를 8로 나누면 나머지는 1이 된다. 해시 함수가 67을 반환하고 이를 8로 나누면 나머지는 3이 된다.

결국 8로 나눈 나머지는 0에서 7사이가 되므로 여덟 대의 서버 역시 0에서 7사이의 값으로 할당될 수 있다.

여기에서 계산된 나머지를 계수라고 한다. 그림 3-12는 각 계수가 서버에 어떻게 할당되는지 보여 준다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.