반응형
샤딩
- 데이터의 분산저장
- 한 대의 서버에 빅데이터를 저장하려고 하면 서비스 성능 저하 발생
- 데이터를 분산하여 순차저장하면 트래픽으로 인한 부하를 효과적으로 처리할 수 있음
- 백업과 복구 전략
- 서버의 데이터 유실에 대비해 미리 데이터를 분산하여 저장함
- 빠른 성능
- 여러 대의 독립된 프로세스가 병렬로 작업을 수행하기 떄문에 빠른 처리 성능을 보장받음
샤딩 시스템의 구조
- mongos: 라우터, 3개의 shard에 분산하여 데이터를 저장함
- mo
샤딩 시스템의 특징
- 샤딩 시스템은 분산처리를 통한 효울성 향상을 목적으로 함
- 가능한 성능보장을 위해 3대 이상의 서버를 샤드로 활용하는 것을 추천
- 최소 2대만 있으면 샤드 서버 구칙 가능
- 샤드 서버로 운영하게 되면 한 대로 운영할 때보다 메모리를 20~30% 더 사용하게 됨
- 샤드 시스템 구축시 사용하는 라우팅 서버인 mongos와 OpLog, Balancer 프로세스가 메모리를 추가로 사용하기 때문
- 20~30% 추가 메로리 준비 필요
config 서버
- 샤드 시스템에 대한 메타데이터를 저장/관리하는 역할
- 샤드 서버의 인덱스를 빠르게 검색할 수 있게 함
- 샤드 서버와 별도의 서버에 구축해야 장애발생에 대응하기 원활
- 1대만으로 운영이 가능하나 장애발생에 대비하여 3대 이상 사용 권장
- 샤드 서버에 비해 저사양 서버 사용 가능
mongos 서버
- 하나 이상의 프로세스를 사용
- config 서버의 meta data를 캐시함
- 빅데이터를 샤드 서버로 분산해주는 프로세스
- config 서버는 각 샤드 서버에 어떤 데이터들이 어떤 식으로 분산 저장되어 있는지에 대한 meta data를 가지고 있는데, mongos 서버를 통해 데이터를 쓰고 읽는 작업이 가능함
샤딩 시스템의 게층
<사진>
- mongos는 중개자 계층
- 중개자 계층은 샤드 메타 정보를 저장하여 응용 계층으로부터 전달된 질의를 분석하여 적절한 샤드에 명령을 수행시킨 다음 결과를 응용게층으로 다시 전달해줌
Shard key 구성
- Shard key 구성은 Mongodb 샤딩 시스템을 구축할 때 가장 중요함
- Shard key는 여러 개의 shard 서버로 분할될 기준필드를 가리키며, partition과 load balancing의 기준이 되므로 데이터 저장과 성능에 절대적인 영향을 미침
- Shard key는 카디널리티(cardinality)를 보고 적절한 선택이 필요함
- 데이터 분포가 넓으면 Low 카디널리티라고 하고, 높으면 high 카디널리티라고 함
- 예) 사원번호는 고유값이므로 높은 카디널리티
- 예) 성별은 남녀 두 개의 값만 가지므로 샤드키로 사용하면 인덱스 도움을 받을 수 없음
- Shard key는 Chunk migration의 횟수와 빈도를 결정함
- Chunk migration: 서버에 균등하게 데이터를 이동하여 재조정하는 과정
- Chunk: 하나의 서버에 저장되는 데이터를 여러 개의 논리적 구조로 분할저장하다가 일정한 데이터 양에 도달했을 때 두 번째, 세 번째 서버로 데이터를 분할하여 저장하는데 이 분할 단위를 Chunk라고 함
- Chunk의 크기는 기본적으로 64MB(100,000행) 단위로 분할되며, 필요시 64MB 이상의 크기로 설정할 수 있음
- 기본 설정 단위보다 빈번하게 Chunk migration이 발생한다면 Chunk의 크기를 더욱 크게 설정해야함
반응형
'DB' 카테고리의 다른 글
[MongoDB] Index 걸기 및 주의사항 (0) | 2022.02.24 |
---|---|
[MongoDB] 기본 CRUD 방법과 예시 (0) | 2022.02.04 |
[MySQL][GCP] SQL 이모지 데이터 입력시 오류, charset utf8mb4로 변경 (0) | 2020.09.04 |
[GCP] MySQL timezone 타임존 변경 (0) | 2020.06.08 |
[MSSQL] 배치파일을 이용해 주기적으로 DB 백업하기, 파일 삭제하기 (0) | 2020.05.07 |