-
MongoDB와 샤딩DB 2024. 3. 6. 04:17728x90
MongoDB
MongoDB는 NoSQL의 한 종류로 Document라는 형식의 자료구조 사용
대용량 데이터를 처리할 때 우수한 성능을 발휘하는 데이터베이스
NoSQL?
Not-Only SQL, Non Relational SQL 등등 여러 의미로 사용 되는 기존의 관계형 데이터베이스와는 다른 새로운 방식의 데이터베이스
대량의 분산된 데이터의 조회에 특화되고 유연한 스키마를 제공하는 저장소
NoSQL 분류
- Wide Columnar Store : 카산드라
- Document Store : MongoDB
- Key-Value Store : 다이나모, 레디스
- Graph Store: Neo4j
NoSQL의 등장배경
- 기존 RDBMS에서는 Storage 비용의 문제로 관계형 DB를 나누어 관리하여 중복 데이터를 줄이는 방향으로 사용했다.
- 하지만 Storage 비용이 감소함에 따라 굳이 RDBMS로 어렵게 관리를 할 필요가 줄어들었다.
- RDBMS는 scale out방식의 확장이 매우 어려웠다. 따라서 Scale up (하드웨어 스펙 업)을 사용했는데 최근 Cloud시대에 scale out 방식이 더 유용하다.
- Schema-less 이다. 빅 데이터 시대에 비정형 데이터가 늘어남에 따라 처음부터 Schema를 설정하지 않고 Data를 저장해야 할 필요가 늘어났기 때문이다.
- SNS와 같이 정확성보다 고 가용성이 필요한 일이 많아졌다.
RDBMS vs NoSQL
MongoDB 구조
RDBMS와 대응되는 MongoDB의 개념
Collection
Document의 그룹이며 관계형 데이터베이스의 테이블과 유사하다.
컬렉션은 단일 데이터베이스 내에 존재하며 스키마를 강제하지 않으므로 컬렉션 내의 Document는 다른 필드와 구조를 가질 수 있다.
Document
MongoDB에서의 기본 데이터 단위로 관계형 데이터베이스의 행과 유사하다.
document는 BSON 형식에 저장된 필드와 값 쌍으로 구성된다.
BSON: 이진 형식이기 때문에 텍스트 형식보다 적은 용량을 사용하며, 처리 속도가 빠릅니다.
{ "_id" : "64b6427fc5129483e1da1de7" // field : value 형태 "name": "한식당", "category": "한식", "isDeleted": true, "createdAt": "2023-07-18T07:42:55.297Z" "__v": 0 }
Document는 동적 스키마를 갖고있기 때문에, 같은 Collection 안의 Document끼리 다른 스키마를 갖고 있을 수 있다. 즉, 서로 다른 데이터들을 가지고 있을 수 있다.
{ "_id": "652ffbaef6c4abb6bee940b5", "membership": "regular", "outputRange": [ 0, 100 ], **"season": "summer",** **"load": "medium",** }
{ "_id": "652ffbaef6c4abb6bee940ac", "membership": "none", "outputRange": [ 0, 999 ], }
MongoDB의 특징
- Document 지향 Database
- 스키마가 유연해서 Application의 요구사항에 맞게 데이터를 수용 가능
- 비정규화로 데이터 중복이 발생할 수 있지만 접근성과 가시성, 읽기 성능이 좋음
- 생성, 수정, 삭제 시 각 컬렉션에 반영해야 하는 단점 존재
- 다양한 종류의 Index를 제공
- 기본 인덱스, Hashed Index(샤드 클러스터에서 데이터를 균등하게 분배하고자 할 때 사용), TTL Index(제한 시간을 설정하여 오래된 데이터를 자동 삭제), Geospatial Index(공간 인덱스, 공간 내의 거리나 범위를 계산) 등
- 쿼리 성능을 최적화
- 응답 시간을 개선
- HA(High Availability) 와 Scale-Out Solution을 자체적으로 지원해서 확장이 쉬움
- HA (High Availability): MongoDB는 복제(replication) 기능을 통해 데이터의 고가용성을 보장한다. 복제를 사용하면, 데이터가 복제 세트(replica set)에 속한 여러 서버에 복사되므로, 하나의 서버에 장애가 발생해도 시스템이 계속 작동할 수 있다. 자동 장애 복구와 장애 감지 기능을 통해, 서버나 네트워크 장애가 발생했을 때 다른 서버가 자동으로 기능을 대체하며, 이로 인해 높은 가용성을 제공한다.
- 수평 확장(scale-out)할 수 있는 샤딩(sharding) 기능 내장
- 샤딩을 통해 데이터를 여러 서버에 분산시키고, 각 서버가 데이터의 일부만을 처리하도록 함으로써 시스템의 처리 능력을 늘릴 수 있습니다. 이는 수직 확장(scale-up, 즉 하드웨어의 성능을 높이는 방법)에 비해 비용 효율적이며, 더 많은 데이터와 트래픽을 처리할 수 있게 한다.
샤딩
데이터를 분산하여 저장하는 개념
MongoDB가 샤드에 걸쳐 데이터 분산을 자동화하므로 용량을 추가하고 제거하기 쉽다.
- 데이터 분산
- 데이터를 분산하여 순차적으로 저장한다면 한 대 이상에서 트래픽을 감당하기 때문에 부하를 분산하는 효과
- 백업과 복구 전략
- 미리 데이터를 분산하여 저장해둔다면 리스크로부터 보호받고 효과적인 시스템 운영이 가능
- 빠른 성능
- 여러 대의 독립된 프로세스가 병렬로 작업을 동시에 수행하기 때문에 이상적으로 빠른 처리 성능 보장
MongoDB 샤딩 구성요소
Config Servers
Sharded Cluster의 메타 데이터, Configuration 등을 저장하는 서버.
Mongos(Router)
- 다수 구성된 샤드의 인터페이스 역할
- 요청의 올바른 샤드로 라우팅
Shard
- 분산된 데이터 저장공간
- 가장 기본이 되는 인스턴스
- 여러 샤드를 구성하게 되면 가용성을 높일 수 있고 데이터의 이중화가 가능해집니다.
- 예를 들어 2TB 라면 4개의 샤드로 나눌경우 500GB로 각 샤드가 데이터를 가질 수 있게 됩니다.
REF
https://devocean.sk.com/blog/techBoardDetail.do?ID=165168
https://colevelup.tistory.com/45
https://jaehoney.tistory.com/314
https://hwanine.github.io/database/MongoDB/
728x90'DB' 카테고리의 다른 글
[혼자 공부하는 SQL] 5장. 테이블과 뷰 (0) 2024.04.27 [혼자 공부하는 SQL] 4장. SQL 고급 문법 (0) 2024.04.17 [혼자 공부하는 SQL] 3장. SQL 기분 문법 (0) 2024.04.04 [혼자 공부하는 SQL] 2장. 실전용 SQL 미리 맛보기 (0) 2024.04.04 [혼자 공부하는 SQL] 1장. 데이터베이스와 SQL (0) 2024.04.04