MongoDB
MongoDB는 NoSQL 중에는 가장 사용량이 많은 데이터베이스이다. NoSQL이란 Not Only SQL으로 기존의 RDBMS의 한계를 극복하기 위해 만들어진 새로운 형태의 데이터저장소이다. MongoDB는 C++로 작성된 오픈소스 문서 지향(Document-Oriented)적 데이터베이스이며, 뛰어난 확장성과 성능을 유지한다. C, C++, C#, JAVA, Python 등 다양한 프로그래밍 언어를 드라이버를 통해 연동할 수 있고 이는 다양한 프로그래밍 언어를 통해 MongoDB의 데이터 갱신, 조회, 변경, 삭제 등 다양한 연산을 수행할 수 있다는 장점이 있다.
다만 MongoDB는 Join 연산이 불가능하기 때문에 Join이 필요 없도록 데이터를 설계하거나 내장문서를 여러 번 쿼리해야 하는 집계 연산으로 Join을 구현해야 한다.
MongoDB는 RDBMS의 한계로 잘 알려진(물리적 또는 비용적) 데이터 수용량을 확대하고자 Scale Out 구조를 채택 함으로 인해 많은 데이터를 저장할 수 있다. Scale Up이란 서버 그 자체를 증강하는 것에 의해서, 즉 리소스를 붙여서 용량을 키워 처리 능력을 향상하는 것이고, Scale Out은 접속된 서버의 대수를 늘려 처리 능력을 향상시키는 것이다. MongoDB에서는 서버의 가상화 기능을 사용하여 하나의 케이스 내에서 가상적으로 복수 서버를 구축해서 스케일 아웃과 동등의 효과 제공한다.
MongoDB의 장점
MongoDB는 스키마를 고정하지 않는 Schema-less 구조이다. 이 구조는 스키마 변경으로 발생하는 문제가 없기 때문에 데이터 모델의 유연한 변화가 가능하며(데이터 모델 변경, 필드 확장 용이) 다양한 형태의 데이터가 저장이 가능하다. 또한 JSON 구조를 지니기 때문에 데이터에 대한 직관적 이해가 가능하며, 실제 내부적으로 Disk에 저장할 때는 BSON(binary JSON)으로 인코딩하여 저장하기 때문에 속도적인 측면에서 장점이 있다. BSON은 binary 형태로 데이터가 저장되기 때문에 기계가 바로 읽을 수 있어 더 빠른 성능을 보이지만 JSON 보다는 많은 용량을 차지한다는 단점도 있다. MongoDB는 위와 같은 이유로 SQL만큼 강력한 Query 성능을 제공하며, 사용방법이 쉽고, 대용량의 데이터를 신속하게 처리가 가능하다는 장점이 있다.
MongoDB의 단점
MogoDB는 불안정함을 보인다. 데이터 업데이트 중 장애 발생 시 데이터 손실 가능성이 있으며, 데이터 분산 저장(샤딩)의 비정상적인 동작 가능성이 있고, 레프리카 프로세스의(복제하는 기능) 비정상적인 동작 가능성이 있다. 또한 많은 인덱스 사용 시, 충분한 메모리 확보가 필요하며 데이터 공간 소모가 RDBMS에 비해 많다.(비효율적인 Key 중복 입력) 또한 제공되는 MapReduce 작업이 Hadoop에 비해 성능이 떨어진다.
RDBMS vs MongoDB 용어 비교
- 컬렉션은 문서의 모음이다.
- 몽고디비의 문서가 관계형 데이터베이스의 행이라면 콜렉션은 테이블이다.
- 같은 컬렉션에 다른 종류의 문서를 저장하는 것은 개발과 관리의 효율이 떨어진다.
- 컬렉션별로 목록을 뽑는 것이 한 콜렉션 내 특정 데이터형 별로 쿼리 해서 목록을 뽑는 것보다 빠르다.
- 같은 종류의 데이터를 하나의 컬렉션에 모아 두는 것은 데이터 지역성을 위해서도 좋음.
네이밍
- 빈 문자열("")은 유효한 컬렉션명이 아님
- 컬렉션명에는 nul을 쓸 수 없음
- System으로 시작하는 컬렉션명은 시스템 컬렉션에서 사용하는 예약어이므로 사용할 수 없음.
- 사용자가 만든 컬렉션은 그 이름에 예약어인 $를 사용할 수 없음.
데이터베이스
- 몽고디비는 컬렉션에 문서를 그룹핑할 뿐만 아니라 데이터베이스에 컬렉션을 그룹 지어 놓음.
- 몽고디비의 단일 인스턴스는 여러 데이터베이스를 호스티알 수 있으며, 각 데이터베이스를 완전히 독립적으로 취급할 수 있음.
- 실제 데이터베이스 이름은 파일시스템 상에서 파일이 됨
- 빈 문자열("")은 유효한 데이터베이스 이름이 아님
- Null값과 특수기호들을 포함할 수 없음
- 대소문자를 구분하여 이름은 최대 64바이트
- 직접 접근할 수는 있지만 특별한 의미를 가지는 예약된 데이터베이스 이름
- local, config 데이터베이스
- local: 복제되지 않기 때문에 특정 서버에만 저장하는 컬렉션에 사용
- config : 몽고디비를 샤딩 설정하는 경우, config 데이터베이스는 내부적으로 샤드 정보를 저장
'Back > MongoDB' 카테고리의 다른 글
MongoDB와 Python 연동하기 (0) | 2023.05.18 |
---|---|
Mongo DB 실습 - 3 (0) | 2023.05.18 |
Mongo DB 실습 - 2 (0) | 2023.05.17 |
Mongo DB 실습 - 1 (0) | 2023.05.17 |
MongoDB 이론 - 1 (0) | 2023.05.17 |