[MongoDB] MongoDB 핵심기능

-- MongoDB 2012. 12. 21. 13:44
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
1. 문서데이터모델(document data model)

몽고DB문서지향적데이터베이스이다

문서에는미리정해진스키마가없다. 몽고DB에서는문서들을컬렉션으로모아놓는데, 어떤종류의스키마도필요하지않다. 이론적으로는하나의컬렉션에포함되어있는각각의문서들이서로완전히다른구조를갖는것도가능하지만, 실제로는컬렉션내에서문서들은상대적으로균일한구조를갖는다. 예를들어게시글(post) 같은컬렉션은 Title,Tag,Comments같은필드가있을있다.

스키마가없는것의장점

우선데이터베이스가아닌애플리케이션이데이터구조를정한다는것이다. 이것은데이터의구조가빈번히변경되는개발초기단계에서개발속도를단축시켜준다. 중요한것은스키마가없는데이터모델을통해가변적인속성을갖는데이터를표현할  있다는것이다.

2. 애드혹질의 (ad hoc query)

임의의질의(Ad hoc)매번실행될때마다

구문분석(Parsing) > 표준화(Standardization) > 최적화(Optimization) > 컴파일(Compile)단계

거치게됩니다.

다시말해 임의의질의(Ad hoc) 실행된후에메모리에실행계획(execution plan)남아있지않습니다.이에비행 저장된질의(Stored Procedure) 실행계획이프로시저캐쉬(Procedure Cache)저장됩니다.당연히성능상에는저장된질의(Stored Procedure) 월등히좋습니다.왜냐하면 syscomments 테이블(SQL Server2000) Query tree저장되어있으므로구문분석부터다시시작할필요가없기때문입니다.


시스템이애드혹질의를지원한다고이것이의미하는바는시스템이받아들일있는질의를미리정의할필요가없다는것이다. 관계형데이터베이스가기능을제공하는데, 질의가어떠한조것을갖도라도 well-formed이기만하면 SQL쿼리가실행된다.
예를들어, -타입의저장시스템은하나의차원, 하나의-값으로만질의를있다. 다른많은시스템에서와같이-저장시스템역시간단하고확장성높은모델을위해풍부한질의어기능을포기한다. 관계데이터베이스에서는너무나기본적인질의어성능을몽고DB에서도대부분유지하려고것이몽고DB설계목표하나이다.

몽고DB에서질의어가어떻게작동하는지보기위해 posts comments관련된예를들어보자. 추천수가 10이상이고 'politics'라는용어로태그된모든포스트를찾으려면 SQL질의어는다음과같다.

SELECT * FROM postINNER JOIN posts-tags ON posts.id = posts_tags.post_idINNER JOIN tags ON posts_tags.tag_id == tags.idWHERE tag.text = 'politics' AND posts.vote_count >10;

같은결과를얻기위한몽고DB질의어는아래와같이일치조건의문서를표현한다. 여기에서 'greater than' 조건을위해 $gt라는특별한키를사용한다.

db.posts.find({'tags':'politics','vote_count':{'$gt':10}});

위의질의어는서로다른데이터모델을가정한다는점을명심할필요가있다. SQL쿼리는 post tag서로다른테이블에저장함으로써엄격하게정규화된모델에의존하는반면, 몽고DB쿼리는태그가문서에포함되어있다고가정한다. 하지만쿼리모두여러개의속성을임의로조합하여질의할있는능력을보여주고있는데, 이러한것이애드혹쿼리의본질적인강점이다.(?)

3. 세컨더리인덱스(Secondary Index)

몽고DB에서세컨더리인덱스는 B트리로구현되어있다. 인덱스는범위를스캔하거나정렬을하는것과같이다양한쿼리에대해최적화되어있다. 몽고 DB에는여러개의세컨더리인덱스를가지고다양한질의어를최적화할수있다

몽고 DB에서는컬렉션에 64까지세컨더리인덱스를만들있다. 인덱스에대해몽고DB MySQL같은구조의데이터를갖기때문에어느한쪽에서인덱스를관리하기위한권고사항은다른쪽에서도적용할있다

4. 복제(replication)

복제셋(replica set)이라고부르는구성을통해데이터베이스복제기능을제공한다. 복제셋은네트워크장애가발생할경우를대비해중복성과자동장애조치를위해데이터를여러대의서버에분산한다

0. 문서기반이다.
1. 빠르고사용하기 쉽다.
2. RDBMS범위쿼리, 보조색인, 정렬같은관계형연산기능과 MapReduce같은집계연산기능을동시에지원한다.
3. 다양한언어를지원한다.(C, java, 파이썬... 10여개의언어에맞는드라이버제공)
4. C++작성되었다.
5. 수평적무한확장가능하다.
6. 데이터는 bson형태로저장된다.(binary json)
7. 구조적이지않다.(RDBMS처럼데어터를분석해서모델링을상세하게필요가없음, 스키마가없음)

구조적/개발자적 관점으로보면다음과같습니다.

1. 객체형태의컬렉션기반저장소
2.
동적쿼리지원
3.
내부객체를지원하는 Full index 지원
4.
쿼리프로파일링
5.
복제, fail-over 지원
6.
비디오파일같은바이너리데이터의효과적인저장소
7.
클라우드기반의자동화된공유

-  다른 NoSQL처럼테이블, 로우컬럼등이존재하지않으며저장의최소단위는 Document 이다. 컬렉션(collection)데이터베이스에서관리한다. Document미리정의하지않아도되기때문에어떤 Document에서는 id존재하지만어떤 Document에서는 Name존재할수있다

, 동적으로데이터의스키마변경이가능하고빠른확장성을보아고객의요구가매번바뀌는 Web기반의서비스나모바일서비스에적합.

'-- MongoDB' 카테고리의 다른 글

[MongoDB] MongoDB 기본쿼리  (0) 2012.12.28
[MongoDB] ObjectID 구조  (0) 2012.12.27
[MongoDB] MongoDB 기본요소  (0) 2012.12.27
[MongoDB] 윈도우XP에 몽고DB 설치하기  (0) 2012.11.15
[MongoDB] “몽고DB 쓰지 마세요”…왜?  (0) 2012.11.15
posted by 어린왕자악꿍