일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 이론
- Javascript
- kubernetes
- Docker Swarm
- 도커
- express
- 쿠버네티스
- RAPA
- 네트워크
- network
- Docker-compose
- MongoDB
- 개념
- nodejs
- RAID
- 실습
- docker
- git
- OpenStack
- gns3
- dockerfile
- worker
- IaaS
- node.js
- 용어정리
- mysql
- 명령어
- 클라우드
- PaaS
- PAT
- Today
- Total
융융이'Blog
mongoDB특징 본문
mongoDB
mongoDB는 NoSQL중 하나이다.
mongoDB의 구조는 위 그림과 같이 구성되어 있다. Document가 모여서 Collection이 되고, Collection들이 모여서 Database를 이루게 됩니다.
Document
JSON과 비슷한 BSON구조로 되어 있다.
RDB과 비교
mongoDB는 C++로 짜여진 오픈소스 데이터베이스이다. 문서지향(Document-Oriented)적이며 뛰어난 확장성과 성능을 자랑한다. NoSQL이다.
RDBMSMongoDB
DataBase | DataBase |
Table | Collection |
Tuple/Row | Document |
Column | Key/Field |
Table Join | Embedded Documents |
PrimaryKey | Primary Key(_id) |
특징과 장단점
특징
-
Document-oriented storage : MongoDB는 database > collections > documents 구조로 document는 key-value형태의 BSON(Binary JSON)으로 되어있다.
-
Full Index Support :
다양한 인덱싱을 제공한다.
-
Single Field Indexes : 기본적인 인덱스 타입
-
Compound Indexes : RDBMS의 복합인덱스 같은 거
-
Multikey Indexes : Array에 미챙되는 값이 하나라도 있으면 인덱스에 추가하는 멀티키 인덱스
-
Geospatial Indexes and Queries : 위치기반 인덱스와 쿼리
-
Text Indexes : String에도 인덱싱이 가능
-
Hashed Index : Btree 인덱스가 아닌 Hash 타입의 인덱스도 사용 가능
-
-
Replication& High Availability : 간단한 설정만으로도 데이터 복제를 지원. 가용성 향상.
-
Auto-Sharding : MongoDB는 처음부터 자동으로 데이터를 분산하여 저장하며, 하나의 컬렉션처럼 사용할 수 있게 해준다. 수평적 확장 가능
-
Querying(documented-based query) : 다양한 종류의 쿼리문 지원. (필터링, 수집, 정렬, 정규표현식 등)
-
Fast In-Pace Updates : 고성능의 atomic operation을 지원
-
Map/Reduce : 맵리듀스를 지원.(map과 reduce 함수의 조합을 통해 분산/병렬 시스템 운용 지원, 하둡처럼 MR전용시스템에 비해서는 성능이 떨어진다)
-
GridFS : 분산파일 저장을 MongoDB가 자동으로 해준다. 실제 파일이 어디에 저장되어 있는지 신경 쓸 필요가 없고 복구도 자동이다.
-
Commercial Support : 10gen에서 관리하는 오픈소스
장점
쌓아놓고 삭제가 없는 경우가 제일 적합하다. (ex. 로그데이터, 세션 등)
-
Flexibility : Schema-less라서 어떤 형태의 데이터라도 저장할 수 있다.
-
Performance : Read & Write 성능이 뛰어나다. 캐싱이나 많은 트래픽을 감당할 때 써도 좋다.
-
Scalability : 애초부터 스케일아웃 구조를 채택해서 쉽게 운용가능하다. Auto sharding 지원
-
Deep Query ability : 문서지향적 Query Language 를 사용하여 SQL 만큼 강력한 Query 성능을 제공한다.
-
Conversion / Mapping : JSON형태로 저장이 가능해서 직관적이고 개발이 편리하다.
단점
정합성이 떨어지므로 트랜잭션이 필요한 경우에는 부적합하다. (ex. 금융, 결제, 회원정보 등)
-
JOIN이 없다. join이 필요없도록 데이터 구조화 필요
-
memory mapped file으로 파일 엔진 DB이다. 메모리 관리를 OS에게 위임한다. 메모리에 의존적, 메모리 크기가 성능을 좌우한다. 2-4를 참고하자.
-
SQL을 완전히 이전할 수는 없다.
-
B트리 인덱스를 사용하여 인덱스를 생성하는데, B트리는 크기가 커질수록 새로운 데이터를 입력하거나 삭제할 때 성능이 저하된다. 이런 B트리의 특성 때문에 데이터를 넣어두면 변하지않고 정보를 조회하는 데에 적합하다.
참조:
https://jinshine.github.io/2018/06/07/MongoDB/MongoDB%20%EA%B5%AC%EC%A1%B0/
'2022이전 > mongoDB' 카테고리의 다른 글
mongoDB 쿼리의 모든 것! (1) | 2020.01.12 |
---|---|
mongoDB와 Express연동하기 (0) | 2020.01.08 |