원본글 : http://blog.iprofs.nl/2011/11/25/is-mongodb-a-good-alternative-to-rdbms-databases-like-oracle-and-mysql/

RDBMS(Oracle, MySQL 등)의 대안으로 NoSQL 특히, MongoDB를 고려하고 있을 때 참조할 만한 글이다.

원본글에서 주요 내용만 정리한 글 임.

 

MongoDB의 특징

  • Flexibility
    • Schema-less 구조를 취함으로써 다양한 형태로 데이터를 저장 할 수 있다.
  • Performance
    • Read&Write 성능이 뛰어나다
  • Scalability
    • RDBMS의 한계로 잘 알려진(물리적 또는 비용적) 데이터 수용량을 확대 하고자 Scale Out 구조를 채택 함으로 인해 많은 데이터를 저장 할 수 있다.

 

Advantages

  • Schema-less(Document Based)
    • 데이터 모델의 유연한 변화가 가능하다. 데이터 모델에 대한 변경,추가 필드 확장이  간단하다. 그러나 RDBMS의 경우 스키마 변경에 따른 추가 작업이 필요 하다.
  • Structure of a single object is clearer
    • 가독성 측면에서 볼 때, json 구조를 사용하기 때문에 RDBMS 테이블 구조에 비해 데이터를 직관적으로 파악 할 수 있다.
  • No sql or hibernate queries (complex joins)
    • MongoDB의 장점 중 하나는 사용하기 쉽다는 점입니다. 비교적 간단한 형태로 기존의 RDBMS의 SQL언어를 대체 할 수 있다. (i,e, $gt, $lt, )
  • Tuning
    • consistency의 레벨이 컨트롤 가능 하기 때문에 성능에 중점을 두거나 또는 정합성에 중점을 둘지 선택 가능하다.
  • Ease of scale-out
    • Auto sharding을 지원 함으로서 장비 확장이 RDBMS 대비 간단하다.
  • Conversion \ mapping of application
    • 객체 구조의 저장이 가능 하기 때문에 개발이 편리하다.

 

Disadvantages

  • 만약 데이터 업데이트 중 장에가 발생한다면 데이터 손실이 발생 할수 있습니다. 따라서 중요데이터는 가급적 분리 보관을 추천한다.
  • 데이터 의 복제 기능을 지원 하기는 하나 완전한 원복을 원한다면 데이터 센터를 분리 해서 설치 해야 한다.
  • 인덱스 구조는 메모리에 저장 되기 때문에 많은 인덱스를 사용한다면 충분한 메모리를 사용하기 바란다.
  • 데이터는 필드네임과 함께 사용해야 함으로 데이터 공간 소모가 RDBMS 대비 많을 가능성이 있다.
  • 복잡한 join사용시 성능 제약이 따를 수 있습니다.Document Based 구조 임으로 가급적 join을 회피하는 구조로 사용 하시기 바란다.
  • transactions 지원이 RDBMS 대비 미약 합니다. 데이터를 복제해서 저장 하기 때문에 성능상 이슈를 피하고자 한다면 transactions 기능의 필요성에 대해 고려 해야 한다.
  • Map/Reduce 작업을 지원하기는 하나 Hadoop과같은 M/R 전용시스템에 비해 성능이 떨어진다.

 

Well suited for the following situations

  • Scaling out (확장성)
  • Caching
  • High volume traffic(read write performance)

 

Less suited for the following situations

  • High transactional  applications(정합성)
  • join
  • Sql 을 대체할수 없는 영역

 

Summary

MongoDB 는 기존의 RDBMS비해 많은 장점을 가지고 있지만 단점도 존재한다. 태생 자체가 RDBMS를 가지고 처리하기 힘든 부분을 처리하기 위해 만들어 졌으며, 그에 비해 RDBMS 장점중의 일부를 포기해서 만든 시스템이기 때문이다.

데이터 전반적인 가이드의 결론은 많은 양의 데이터와 쓰기 읽기등 퍼포먼스에 치중한다면 MongoDB를 transaction과 같은 정합성 위주의 시스템을 사용한다면 RDBMS를 사용하기를 추천한다.

Reference