본문 바로가기

데이터베이스(DA, AA, TA)/NoSQL

[데이터베이스] mongoDB 샤딩

수직 샤딩: 컬렉션 단위로 데이터를 나누어 할당. 데이터베이스별로 지정된 프라이머리 서버에만 저장됨.

 (똑같은 데이터가 여러 서버에 나뉘어 있음 : QPS는 분산되나, 데이터 사이즈는 분산 불가능)

수평 샤딩: 하나의 컬렉션의 도큐먼트를 여러 서버에 나누어 할당

 (콜렉션 총 크기가 10TB라면, 10대의 서버가 약 1TB씩 데이터를 가지고 있는 형상)




HBase는 클러스터 접근 HMaster에 접근하며, 원하는 데이터노드의 정보를 받아 그 데이터 노드에 가서 클라이언트 노드와 통신하게 된다. 만약 접속 중인 data node에 원하는 데이터가 없으면 다시 HMaster(리전 서버)에게 문의한다.


MongoDB에서 클라이언트는 무조건 Mongos 서버(라우팅 역할만)와만 통신한다. Config서버(replica set으로 구성해야해서 최대 3대 존재해야함)라고 메타데이터 관리용 서버로 어떤 data chunk는 어디에 존재한다는 메타 정보를 가지고 있다. 그리고 각각의 data chunk를 가지고 있는 Shard가 존재한다.


샤드키는 보통 하나의 컬렉션 당 하나만 설정 가능하고, 변경도 불가능하다.


1. config 서버로부터 chunk에 대한 메타 데이터를 가져와 라우터 메모리에 캐시

2. 쿼리 조건에 샤딩키 있으면 해당 샤드에 쿼리 요청(타겟 쿼리)

3. 쿼리 조건에 샤딩키 없으면 브로드캐스트 쿼리

4. 각 샤드로부터 결과가 오면 병합하여 쿼리 결과 반환


청크: 샤드키를 기준으로 나뉘어진 데이터의 조각.