몽고디비 인 액션 1장

최신 웹을 위한 도큐먼트 데이터베이스

MongoDB는 웹 애플리케이션과 인터텟 기반을 위해 설계된 데이터베이스 관리 시스템이다.

MongoDB의 도큐먼트 형식 : JSON 방식의 데이터구조 스키마 (Hasp Map과 같은.)
=> 관계형모델처럼 서로 join의 필요성 및 테이블 추가가 필요없다.
=> 새로운 속성을 한 도큐먼트에 동적으로 추가할 수 있다.

{
_id: 10,
username: 'peter',
email: [
 'pbbakkum@gmail.com',
 'pbb7c@virginia.edu'
 ]
}

애드혹 쿼리 (ad hoc query)

키-값 타입의 저장 시스템은 하나의 키-값으로만 질의할 수 있음.

예시. 추천수가 10이상의 ‘politics’ 용어 포스트 조회

  • SQL쿼리
SELECT * FROM posts
INNER JOIN posts_tags ON posts.id = posts_tags.post_id
INNER JOIN tags ON posts_tags.tag_id == tags.id
WHERE tags.text = 'politics' AND posts.vote_count > 10;
  • MongoDB
db.posts.find({'tags': 'politics', 'vote_count': {'$gt': 10}});

인덱스 (INDEX)

MongoDB에서 인덱스는 B-트리로 구현되어 있다.
다른 NoSQL데이터베이스와는 다르게 세컨더리 인덱스(PK외 인덱스)도 허용함으로써 사용자가 넓은 범위의 쿼리를 최적화하도록 허용한다.
MongoDB는 한 컬렉션에 64개까지 세컨더리 인덱스를 만들수 있다. 오름차순, 내림차순, Unique, 복합키(compound-key), 해시, 텍스트, 공간인덱스 같은 모든 인덱스를 사용가능 하다.

복제 (Replica Set)

MongoDB는 복제세트(replica set)라고 부르는 구성을 통해 데이터베이스 복제기능을 제공한다.
이를 통해 자동 장애조치 지원 및 프라이머리 노트에 대해 읽기,쓰기 세컨더리 노드에 읽기만 가능하도록 분산할 수도 있다.

속도와 내구성

많은 RDBMS가 캐시와 디스크를 조합하며, 메모리에 우선적으로 쓰기 작업이나 데이터를 읽어와서 처리하고, 메모리에서 완료된 작업만은 디스크에서 처리하는 방식을 사용하지만, MongoDB의 경우 쓰기 시맨틱스와 저널링을 통해 속도와 내구성 사이에서 타협을 이룰 수 있다.

확장

MongoDB는 수평적 확장이 용이하도록 샤딩(sharding)을 통한 확장을 지원한다.

코어서버

코어 데이터베이스는 서버는 mongod를 통해 구동된다.

MongoDB를 사용하는 이유

MongoDB는 키-값 저장 시스템(시스템의 단순성으로 속도가 빠르고 확장도 용이)의 장점만을 모아서 설계되었다.
MongoDB는 웹 애플리케이션, 분석과 로깅 애플리케이션, Cache를 필요로하는 하는 애플리케이션에서 일차 저장 시스템으로 적합하다. 또한, 스키마가 없는 데이터를 저장하기가 유용함으로 미리 구조를 알기 힘든 데이터를 저장하는데 유용하다.

데이터 모델용례
간단한 키-값 저장 시스템멤캐시디, Redis키-값,멤캐시디는 이진 blob캐싱, 웹 ops
정교한 키-값 저장 시스템카산드라, 볼드모트 프로젝트, Riak 등카산드라는 칼럼으로 부르는 키-값을 사용.볼드모트는 이진 blob을 사용.고효율 verticals(액티비티 피드, 메시지 큐)캐싱. 웹 ops
관계데이터베이스(RDBMS)오라클, MySQL, MariaDB, PostgreSQL 등테이블트랜잭션이 필요한 시스템 또는 SQL.정규화된 데이터 모델.
다른 데이터베이스와 비교

도큐먼트 데이터베이스

MongoDB와 CouchDB가 있으며, CouchDB는 JSON을 단순 텍스트로 저장한다.
CouchDB도 세컨더리 인덱스를 지원하지만, 인덱스가 맵리듀스 함수를 작성해서 정의된다는 점이 다르다. 선언적인 구문보다 더 복잡하고 샤딩은 지원하지 않으며 각각의 노드에 동일한 복제 노드만 구성된다.

사용 예와 배포

  • 웹 애플리케이션 : 웹 애플리케니션에서 일차적 데이터 저장 시스템으로 사용하기 적당하다.
  • 애자일 개발 : 애자일의 신속개발에 이용 적합하다.
  • 분석과 로깅 : automic업데이트(클라이언트는 카운터 값을 효율적으로 증가하고 값을 배열에 푸시)와 capped컬렉션 특징으로 로깅에 유용하다.
  • 캐싱
  • 가변적인 스키마

팁과 한계

  • MongoDB는 보통 64비트 시스템에서 실행되어야한다. (32비트는 4GB 메모리만 사용가능하다)
  • 전용 서버에서 최적 실행된다.
  • SQL쿼리만큼 친숙하거나 쉽지않다.
  • 대규모의 클러스터를 운영하기 위해서는 유지비용이 발생한다.

Leave a Comment