MongoDB(Document Stroe)
요즘 MEAN STACK과 유행하고 있는 데이터 베이스이다.
NoSQL의 일종으로 SQL문을 쓰지 않고 JSON형식으로 핸들링한다는 특징이 있다.
--- Redis(in memory : key-value Store) = 데이터 모델이 다르다.
Document Store 는 Key-value Store가 확장된 형태.
Humongos 라는 회사의 제품명이었다가 현재 10gen으로 회사명이 변경되었다.
C++기반의 오픈소스 document 데이터베이스.
기본적인 인터페이스로 JSON을 이용해 웹에서의 접근성을 높이면서도
커서, 참조키 등 기존 SQL과 유사한 개념을 유지하고 있다.
특징
- JSON Type의 데이터 저장 구조를 제공한다.
- CRUD(Create, Read, Update, Delete) 위주의 다중 트랜잭션 처리도 가능하며 인덱스로 빠른 데이터 검색이 가능하다.
- MapReduce(분산/병렬처리) 기능을 제공한다.
- '쿼리 언어'로 자바스크립트 사용. 복잡한 로직을 임의로 표현할 수 있다.
느리기 때문에 실시간 데이터 분석에는 적합하지 않음. - Sharding(분산)/Replica(복제) 기능을 제공한다.
- 큰 크기의 객체를 다룰 때에는 GridFS를 사용하고, 색인을 다룰때는 B-트리를 사용한다.
장점
- Scale Out 구조를 채택하여 서버 확장에 용이하다. 그러므로 더 많은 데이터를 저장할 수 있다.
- Schema-less(Document Based)구조를 취함으로써 데이터 모델의 유연한 변화가 가능하다.
RDBMS는 스키마 변경에 따른 추가작업이 필요하다. - 가동성 측면에서 볼 때, json 구조를 사용하기 때문에 RDBMS 테이블 구조에 비해 데이터를 직관적으로 파악할 수 있다.
(이 경우에는 조금 의견이 엇갈리는 부분인데, JSON 구조가 눈에 익지 않은 사람에게는 그 반대일 것이다.) - 비교적 간단한 형태의 언어로 SQL언어를 대체할 수 있다.(SQL언어를 지원하지 않는다가 단점이 되겠다.)
- 일관성의 레벨이 컨트롤 가능하기 때문에 성능에 중점을 두거나 또는 정합성에 중점을 둘지 선택이 가능하다.
- Auto Sharding을 지원한다. 장비확장이 더 간단하다.
- 객체 구조의 저장이 가능하기 때문에 개발이 편리하다.
모든 곳에서 몽고디비의 장점만 말하고 있다.
분명 NoSQL의 한계가 존재할 것이고 과대평가되었다고 생각한다.
단점
- 데이터 업데이트 중에 장애가 발생하면 데이터 손실이 발생할 수 있다. (중요 데이터는 분리 보관을 해야한다.)
- 완전한 원복을 하려면 데이터 센터를 분리해서 설치해야 한다.
- 많은 인덱스를 사용하려면 충분한 메모리를 사용해야 한다.(인덱스 구조가 메모리에 저장됨)
- 데이터 공간 소모가 RDBMS 대비 많은 가능성이 있다.(데이터가 필드네임과 함께 사용해야함)
- 복잡한 join 사용시 성능 제약이 따를 수 있다.(Document Based 이기 때문에)
- transaction 지원이 RDBMS 대비 미약하다.
- 쿼리 문법이 불편하다.
무엇이 맞고 틀린지는 결정할 수 없는 문제이다.
MySQL과 MongoDB는 비교될 수는 있지만 둘 중 어느 하나가 틀린 것은 아니다.
서로 다른 태생이고 서로에게 맞는 각자의 목적이 존재한다.
(예를 들면, 정형화된 스키마가 필요할 때는 MySQL, 빅데이터를 다루어야 할 때는 mongo이런 식으로)
각자의 목적과 장점을 살려 상황에 맞춰 적재적소에 사용해주면 될 것이다.
-..-
'Dev.World > 개발상식&언어' 카테고리의 다른 글
[그들이 쓰는 언어] 6. 프록시 / 크로스 브라우징 (0) | 2016.04.23 |
---|---|
[개발상식] 11. SDN(Software Defined Networking) (0) | 2016.04.21 |
#NoSQL에 대해 알아보자 1. Redis (/ Memcached) (0) | 2016.04.18 |
[개발상식] 10. Cookie / Session / Cache (0) | 2016.04.17 |
[그들이 쓰는 언어] 5. 크롤링(Crawling) (0) | 2016.04.13 |