일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Machine Learning
- 확률
- 통계
- 빅 데이터
- Statistics
- 빅 데이타
- 김양재 목사님
- probability
- c++
- 주일설교
- WebGL
- R
- 우리들교회
- 김양재 목사
- Artificial Intelligence
- node.js
- nodeJS
- 인공지능
- Deep learning
- 빅데이타
- 데이터 과학
- MongoDB
- No SQL
- openCV
- 딥러닝
- data science
- Big Data
- 몽고디비
- 빅데이터
- 김양재
- Today
- Total
Scientific Computing & Data Science
[MongoDB] Sharding / Shard Keys 본문
by Geol Choi |
샤드 키란?
샤드 키(Shard Keys)는 클러스터의 샤드들 간에 컬렉션의 도큐먼트를 어떻게 분산할 것인가를 결정하는 것이다.
다음의 예를 들어보자. 4개의 샤드로 구성된 클러스터가 있다고 가정하자. "x"라는 도큐먼트 키를 기준으로 샤드 1(Chunk 1)에는 "x"가 -75까지의 데이터를 저장하고, 샤드 2에는 25까지, 샤드 3에는 175까지, 샤드 4에는 175보다 큰 데이터를 분산하여 저장한다. 이 때 데이터를 분산하는 기준이 되는 키인 "x"를 샤드 키라고 한다.
[그림 1.] 샤드 키를 이용하여 데이터 세트를 여러 개의 덩어리(chunk)로 분할.
샤드 키의 작동 원리
만약 회원 관리를 위한 멤버 데이터베이스(members)를 나이(age)별로 "0-30", "31-60", "61-무한대"의 3개의 덩어리의 샤드로 나눈다고 하자. 이 때 "age"는 샤드 키가 될 것이며, 이 샤드 키에 대해 다음의 쿼리에 대한 작동 원리를 알아보도록 한다.
[그림 2.] 샤드 키 "age"를 이용하여 데이터 세트를 여러 개의 덩어리(chunk)로 분할.
db.members.find({age: 17})
mongos는 age가 17이 어느 범위에 chunk에 해당하고 있는지 알고 있다. 즉, {age: 17}은 chunk 1에 해당하는 것을 알고 있기 때문에 mongos는 이 쿼리를 chunk 1으로 직접 요청하고, 처리된 데이터는 다시 mongos를 통해 클라이언트로 보내어 진다.
[그림 3.] 해당 샤드로 쿼리 요청 및 결과 반환.
db.members.find({age: {$gt: 40}})
mongos는 age가 40 보다 큰 멤버가 어느 chunk에 저장되어 있는지 알고 있다. 즉, {age: {$gt: 40}}인 쿼리에 해당하는 chunk는 chunk 2와 chunk 3이므로, 직렬로 chunk 2와 chunk 3에 순차적으로 쿼리를 요청한다. 처리된 결과는 mongos가 취합하여 클라이언트로 보내어 진다.
[그림 4.] 해당 샤드로 쿼리 요청 및 결과 반환.
db.members.find().sort({name: 1})
이 쿼리는 name 키로 내림차순 정렬을 하는 것이다. mongos는 각 샤드에 쿼리를 요청하고 각 샤드로부터 정렬된 결과를 취합한다. 샤드로부터 mongos에 전달된 결과값은 데이터 자체가 아닌 커서(cursor) 값을 받기 때문에 전체 결과 데이터를 가져올 필요가 없으며 클라이언트에 커서 값으로 순차적으로 각 서버로 요청하여 정렬된 데이터를 보여 준다.
db.members.find({name: "gchoi"})
현재 샤드 키는 age로 지정되어 있으므로, mongos는 "gchoi"라는 name이 어느 chunk에 저장되어 있는지 알 수 없다. 따라서, mongos는 모든 샤드에 대해 직렬로 쿼리를 전달하게 되고 각 샤드는 요청된 쿼리를 처리하여 mongos로 결과를 알려준다. mongos는 결과를 취합하여 클라이언트에 전달한다.
'Data Science > MongoDB' 카테고리의 다른 글
[MongoDB] Sharding / Product Configuration (0) | 2014.04.23 |
---|---|
[MongoDB] Sharding / Setting Up Sharding (1) | 2014.04.22 |
[MongoDB] Sharding / Introduction (0) | 2014.04.13 |
[MongoDB] Replication / Replication with Authentication (0) | 2014.04.10 |
[MongoDB] Replication / Replication State & Local DB (0) | 2014.04.09 |