글모음

‘샤딩’ 범주에 대한 글모음

Hashed index of MongoDB 2.4

글 : 이승용

10gen에서 MongoDB 2.4를 3월 19일에 발표하였다. 발표된 새로운 MongoDB 2.4의 기능 중에서 관심 있게 필자가 살펴본 기능은 해시 인덱스(hash index) 부분이다. MongoDB는 데이터 분할을 위한 방법을 도큐멘트를 구성하는 임의의 항목을 분할 키로 설정하여 키 영역에 따른 샤드 구조를 가지고 있었다. 이러한 구조는 많은 MongoDB를 사용하는 사람들에게 영역에 따른 샤드 분할이 빠른 검색을 제공해주는 장점을 가지고 있지만, 데이터 분배가 골고루 발생되지 않는다는 문제점을 가지고 있었다. 즉, 특정 영역으로 데이터 삽입이 몰리면 한쪽 샤드로 부하가 집중되고 나머지 영역을 가지고 있는 샤드는 부하가 발생하지 않는 비효율적인 구조가 된다. 물론 MongoDB의 자동 분할(auto-sharding) 기능을 이용한다면 한쪽으로 집중된 데이터가 다른 샤드로 이동되면서 부하가 분산될 수 있다고 말할 수 있다.

MongoDB 2.4는 이러한 문제를 해결하기 위해, Dynamo에서 사용된 Consistent Hash 기법을 이용하여 데이터 저장 분포를 균등하게 가질 수 있는 해시 인덱스(hased index) 기능을 제공한다. 해시 인덱스는 샤드 키 값의 영역으로 데이터 분할을 수행하던 분할 기준을 샤드 키 값을 해시 값으로 변환하여 데이터를 분할하는 방법이다. 하기 그림을 살펴보자. 그림과 같이 샤드 키 값 1은 MD5 해시 알고리즘에 의해 2193[1]으로 변환되었고, 변환된 해시 값은 config 서버에 등록된 청크 테이블에서 해당되는 샤드를 검색한다. 그리고 검색된 샤드로 질의를 수행한다.

MD5 해시의 특성상 연속된 2개의 값이 연속된 해시 값을 가진다고 보장할 수 없기 때문에 고르게 분포되어 데이터가 저장된다. 이외에도 문자열로 구성된 샤드 키를 해시 인덱스를 이용하여 적용할 경우, 비교 대상이 해쉬 값으로 변경되어 문자열 보다 빠른 샤드 키 선택이 이루어진다.[2]

앞에서 논한 것처럼, 해시 인덱스가 장점만을 가지는 것은 아니다. 해시 인덱스의 경우는 범위 검색이 불가능하다는 단점이 있다. 즉, a라는 항목이 정수 값을 가지고 있고, 이를 해시 인덱스로 정의하였다면, a > 30와 같은 질의를 위해 해시 인덱스를 사용할 수 없고, 전체 샤드에 동일한 질의를 모두 전달하여 해당 범위의 값을 취득한다.

MongoDB의 발전된 모습의 한가지로 해시 인덱스를 제공해 주고 있지만, 해시 인덱스 사용 역시 MongoDB를 사용하는 프로그래머의 몫이다. 데이터 저장이 높은 cardinality를 보장하여야 한다면, 해시 인덱스가 좋은 해결책이 될 수 있지만, 범위 검색과 같이 특정 영역 안에 있는 데이터를 빈번하게 검색하는 질의에서는 그다지 좋은 성능을 보장하지 못한다. 또한 해시 인덱스의 분할 영역 역시 자동으로 사용하지 않을 경우, 프로그래머가 직접 정의하기 때문에 분할 영역 설정에 신중해야 한다.


[1] 해시 값 2193은 1의 MD5의 해시 값이 아닌 가상의 값이다.

[2] MongoDB가 제공하고 있는 해시 인덱스는 128bit의 MD5 중에서 64비트만을 사용한다.


  • Facebook
  • Twitter
  • Delicious
  • LinkedIn
  • StumbleUpon
  • Add to favorites
  • Email
  • RSS
Categories: 샤딩 Tags:

MongoDB의 샤딩

MongoDB의 샤딩 구조는 분산데이터베이스의 전통적인 분할 3계층 구조 – 응용, 중개자, 데이터 계층 – 를 가진다. 중개자 역할을 담당하는 mongos와 중개자의 메타 정보를 저장하고 있는  config 서버, 그리고 데이터를 저장하는 mongod 로 구성된다. 본 절에서는 이러한 MongoDB의 샤딩 구조에 대한 기본적인 개념부터, 각 모듈들이 처리하는 내부 구조에 대해서 알아본다.


  • Facebook
  • Twitter
  • Delicious
  • LinkedIn
  • StumbleUpon
  • Add to favorites
  • Email
  • RSS
Categories: 샤딩 Tags: , , , ,