1.1. 몽고라고 들어봤나?
IT의 화두는 매년 바뀌는 것 같습니다.
ajax에서 시작된 web2.0... 얼마지나지 안아서 모바일 모바일 하더니 근래엔 너도 나도 클라우드하는 것 같습니다.
이제는 너무 익숙한 클라우드를 구축하기 위한 기반 기술 중에 중요한 것 중 하나가 데이터에 대한 수평확장입니다.
수평적 확장을 지원하는 데이터 저장 방식에는 여러가지가 있지만 그 중 모바일 및 web 서비스와 궁합이 잘 맞는 NoSQL 그중 MongoDB에 대한 정리를 할까 합니다.
NoSQL은 No SQL(SQL이 아니다) 이라 칭하기도 하고 Not Only SQL (SQL만은 아니다)라고도 합니다.
어떻게 칭하든 기존 RDBMS와는 다른 DBMS라고 생각하면 될 것 같습니다.
그러면 RDBMS와 비교를 해보겠습니다.
데이터 저장에 대한 이론중 CAP이론이라는 것이 있습니다.
RDMBS는 CAP이론에서 consistency(데이터의 신뢰성과 일관성)과 availability(독립성)에 중점을 둔 것으로 결제, 인증등 트랜젝션 처리에 꼭 필요한 존재 입니다.
(나는 1000원 입금했는데 상대방은 못 받았다고 하면 안되겠죠??ㅎ)
NoSQL은 일관성 보다는 가용성과 확장성에 중점을 둔 것으로 저장 방식에 따러서 문서기반, 컬럼기반, 그래프, 키/벨류 등 다시 여러개로 나뉘어집니다. (rdbms - ca, nosql - cp or ap)
그 중 몽고DB는 문서 기반 NoSQL(Document base)로써 신뢰성과 확장성에 중점을 둔 빠른고 쉬운 DB입니다.
오픈소스 중에서 유명한 문서 기반 NoSQL은 얼랭으로 제작된 CouchDB와 MongoDB가 있습니다.
CouchDB의 경우 얼랭(Erlang)이라는 랭귀지로 작성되었고 얼랭은 JAVA나 C와는 다른 유일하게 상업적으로 성공한 Function기반 언어 입니다.
속도가 빠르고 언어 자체적으로 분산을 지원하며 쓰레드 모델을 사용하지 않습니다.(프로세스모델)
하지만 이 언어를 기반으로 작성된 CouchDB는 아직 빠르지 않고 많이 알려지지 않았습니다.
CoucnDB는 매 릴리지마다 거의 10배 이상 속도 향상을 시키고 있는 만큼 제품에 바로 적용하기에는 이르다고 보면 될 것 같습니다.
작년에 Erlang부터 CouchDB까지 공부했었는데 아직 적합한 프로젝트를 만나지 못해서 그냥 공부만 한 상태입니다..ㅠㅠ
(CAP 이론과 NoSQL에 대한 분류/특징은 나중에 별도의 글로 올리도록 하겠습니다.)
본격적으로 MongoDB를 살펴 보겠습니다.
MongoDB의 특징은 다음과 같습니다.
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. 클라우드 기반의 자동화된 공유
아무튼 좋아 보입니다..ㅎㅎ
MongoDB도 여타의 NoSQL처럼 테이블, 로우, 컬럼등이 존재하지 않습니다.
저장의 최소단위는 Document 이며 이는 RDBMS의 로우와 비슷하다고 보면됩니다.
각 Document는 RDBMS의 테이블과 비슷한 컬렉션이라는 곳에 모여 있습니다.
그리고 각 컬렉션은 데이터베이스에서 관리하게 됩니다.
Document의 구조를 미리 정의하지 않아도 되기때문에 어떤 Document에는 id가 존재하지만 어떤 Documemt에는 name만 존재할 수 도 있습니다.
하지만 추후 분석 및 데이터 처리를 위해서 비슷한 성격의 Document를 같은 컬렉션에서 관리하는게 좋습니다.
예를 들어 회원 정보 조회에 필요한 name, id, pwd...등의 document와 게시판 형태의 subject, content, attachmemt 들을 같은 컬렉션에 저장하면 조회나 수정시 불편하고 비효율적이니까요.
json 형태의 데이터 예)
{ name : “Joe”, x : 3.3, y : [1,2,3] }
{ name : “Kate”, x : “abc” }
{ name : “Joe”, age : 30, interests : ‘football’ }
{ name : “Kate”, age : 25 }
MongoDB는 json에 바이너리 기능을 추가해서 bson이라는 형태로 데이터를 저장합니다.
동적으로 데이터의 스키마를 바꿀 수 있고 빠르고 확장이 편하기 때문에 고객의 요구가 시시때때로 변하는 web 기반의 서비스나 모바일 서비스와 아주 궁합이 잘 맞습니다.
다음 연제에서는 설치와 구동을 중심으로 따라하기식의 내용과 데이터 복제, 샤딩에대해서 올리도록 하겠습니다.
얼마나 빠르고 편한지... 기대하셔도 좋습니다.
출처 : http://cafe.naver.com/hermeneus/52
NoSQL 데이터베이스는 전통적인 관계형 데이터베이스 보다 덜 제한적인 일관성 모델을 이용하는 데이터의 저장 및 검색을 위한 매커니즘을 제공한다. 이러한 접근에 대한 동기에는 디자인의 단순화, 수평적 확장성, 세세한 통제를 포함한다. NoSQL 데이터베이스는 단순 검색 및 추가 작업을 위한 매우 최적화된 키 값 저장 공간으로, 레이턴시와 스루풋과 관련하여 상당한 성능 이익을 내는 것이 목적이다. NoSQL 데이터베이스는 빅데이터와 실시간 웹 애플리케이션의 상업적 이용에 널리 쓰인다. 또, NoSQL 시스템은 SQL 계열 쿼리 언어를 사용할 수 있다는 사실을 강조한다는 면에서 "Not only SQL"로 불리기도 한다.
'DB' 카테고리의 다른 글
HDFS (0) | 2014.11.28 |
---|---|
MAPREDUCE 과정 (0) | 2014.11.28 |
ORACLE 쿼리 분석(실행계획) (0) | 2014.11.28 |
ORACLE HINT (0) | 2014.11.28 |
쿼리 튜닝 종류 (0) | 2014.11.28 |