Mongodb_sharding
샤딩의 개념과 정의 샤딩의 목적
- 데이터의 분산 저장
- 백업과 복구 전략
- 빠른 성능 : 독립된 프로세스가 병렬로 작업을 수행하기 때문에 빠른 처리 성능 보장
샤딩 시스템 구조 https://elky84.github.io/images/mongodb_sharding_internals.jpg
- mongos: 라우터 역할 수행 : 하나 이상의 프로세스를 사용 : Config 서버의 Meta-data를 캐시 : 빅데이터를 샤드 서버로 분산해주는 프로세스 : mongos 서버를 통해 데이터를 읽고/쓰는 작업이 가능
- 3개의 샤드를 가짐. 샤드키를 기준으로 데이터를 3대에 분산해서 저장
- 레플리카 셋 구성 동일한 데이터를 세 개 구성
- Config Servers : Config 서버는 샤드 시스템에 대한 메타 데이터 저장/관리 역할 : 샤드 서버의 인덱스 정보를 빠르게 검색 가능케 함 : 샤드 서버와 별도의 서버에 구축이 기본
Shard key 구성
- Shard Key는 여러 개의 Shard 서버로 분할 될 기준 필드를 가리키며, partition과 load balancing에 기준이 됨
- 샤드키는 카디널리티를 보고 적절한 선택이 필요하며, 데이터 분포가 넓으면 Low 카디널리티, 분포가 높으면 High 카디널리티라고 부름
- 예로 사원번호는 고유한 값으로 구성돼 높은 카디널리티를 가지게 된다. 남자, 여자 라는 필드로 샤드키를 구성을 하면 검색 시 인덱스에 도움을 받을 수 없다.
Chunk Migration
- 마이그레이션: 데이터의 이동. 서버에 균등하게 데이터를 재조정하는 과정
- Chunk Default: 64M or 100,000행
- 기본 설정 보다 빈번하게 Chunk Migration이 발생한다면 Chunk 크기를 더욱 크게 설정해야 한다.
- 예로 하나의 서버에만 데이터가 집중되고 전체 샤드 서버에 골고루 데이터가 분산되지 않는다면 Chunk 크기를 더 작게 설정해 효율적으로 데이터 분산이 필요하다.
샤딩 시스템 구성
- 샤드 서버용 저장 공간 생성
- config 서버용 저장 공간 생성