2015년 6월 25일 목요일

MongoDB의 특징

출처: http://cafe.naver.com/hermeneus/164

MongoDB의 특징을 간략하게 정리해 보았습니다.

1. 목적
   o 성능
   o 확장성
   o  편의성

2. 특징 및 장점
   o Full Index 지원
       -. unique index
       -. compound index
       -. geospatial index
       -. 내부 객체 index
   o Auto-Replication
       -. 안정성이 높음
       -. fail-over
   o Auto-Sharding
       -. 고가용성
       -. 쓰기성능 향상
   o 작성 언어
       -. C++ 로 개발되어서 퍼포먼스가 좋음
       -. Cassandra 같은 경우 Java로 개발되어서 Full GC로 인한 성능저하가 발생할 수 있음
   o 복잡한 Query 지원
       -. 대부분의 NoSQL DB에 비행 상당히 복잡한 query 도 지원
   o Document-oriented DB 
       -. hbase, cassandra 같은 column family 구조(다소 복잡)와 달리 유연한 구조
       -. couchDB 와 같은 문서 지향 DB
   o Protocol 
       -. http/rest 같은 부담이 큰 프로토콜 대신 TCP/IP 이진 와이어 프로토콜을 사용해서 성능이 우수함
   o DB 공간을 미리 할당 
       -. DB 공간을 동적으로 미리 할당해서 일관된 성능 유지
       -. 64m, 128m, 2g, 2g, ... 로 증가
   o 저장소 기본 엔진
       -. memory-mapped file 을 사용해서 메모리 관리 책임을 OS로 넘김
       - .메모리 용량이 부족하면 LRU 방식으로 동작하기 때문에 page fault 발생이 증가하여 성능이 저하될 수 있으므로 
          충분한 메모리 용량을 확보
   o 동적 쿼리 옵티마이저 사용
       -. 몇개의 실행계획을 동시에 실행해서 가장 먼저 완료한 쿼리를 사용하고 나머지는 종료
       -. 주기적으로 다른 실행계획 시도
   o 부담을 최소화한 설계 
       -. 연산과 로직을 드라이버 또는 사용자 어플리케이션에서 처리하도록 클라이언트 몫으로 넘김
   o 간편한 관리
       -. 서버들이 스스로 관리하도록 설계함
   o stored javascript 사용
       -. 사용하기 편리한 shell
   o bson(binary json) 사용
       -. 여백을 많이 사용하지 않고 효율적으로 데이터를 표현하기 위해 설계됨
       -. 빠르게 인코딩/디코딩 할 수 있게 설계되어서 성능이 우수
       -. 웹에서 접근성이 높음
   o Journaling
       -. --journal 옵션으로 쉽게 설정
   o 데이터 쓰는 방법이 빠름
       -. 데이터를 메모리에 저장한 후 나중에 백그라운드 스레드를 통해 디스크에 기록하는 방식으로 성능이 우수함
   o 다양한 언어로된 드라이버 제공
   o 런타임에 쉽게 변경 할 수 있는 유연한 스키마를 가짐
   o 규모가 크거나 작은 모든 곳에 사용 가능
   o Map/Reduce
   o GridFS
   o update 성능 우수
       -. no row lock, no table lock
   o 컬렉션 기반 저장소
       -. 객체 형태로 간편하게 저장
   o Commercial Support
       -. 10gen 에서 관리, 교육 및 컨설팅을 하는 open source 이기 때문에 믿을수 있음
   o 라이센스
       -. AGPL
       -. drivers(Apache)

3. 단점
   o 트랜잭션이 없음
       -. 트랜잭션이 중요한 시스템에는 사용할 수 없음.  예)금융, 빌링, 회원테이블...
   o join 이 없음

댓글 없음: