1. Introduction
MongoDB is a document database designed for ease of application development and scaling.1
MongoDB는 유명한 NoSQL, 도큐먼트 지향(document-oriented) 데이터베이스 시스템 중 하나다.
NoSQL¶
NoSQL이란 Not only SQL의 약자이며, 단순히 비관계형(Non-relational)을 지향하는 것이 아니라 기존의 관계형 DBMS가 가지고 있는 특성에 다른 특성을 부가적으로 지원한다는 것을 의미한다. 기존에 많은 데이터들이 테이블의 형태로 존재했지만, 빅데이터 시대가 되면서 비정형 데이터를 유연하게 저장하고 처리하고 싶어서 이러한 NoSQL 데이터베이스가 각광을 받기 시작했다.
테이블 간의 JOIN 기능 없고 데이터의 스키마와 속성들을 다양하게 정의할 수 있다. 또한 데이터 처리의 완결성을 미보장하지만 폭 넓은 확장성을 제공한다는 특징이 있다.
Document-oriented¶
MongoDB에서는 레코드(record)를 도큐먼트(document)라고 부른다. 도큐먼트는 필드(field) 와 값(value) 쌍으로 이루어진 데이터 구조를 가지고 있으며, 이는 JSON(JavaScript Object Notation)과 매우 유사하다. 필드는 키(key) 라고도 불리우며, 키값은 다른 도큐먼트, 배열 혹은 도큐먼트 배열을 포함할 수도 있다. MongoDB는 JSON Schema2를 확장하여 BSON(binary JSON)를 만들어서 스키마로 사용하고 있다. 덧붙이면 스키마(Schema)는 데이터 오브젝트의 타입, 자료구조 등을 설명하는 명세서라고 생각하면 된다. 3
{
_id: ObjectID("35n2lkjald438"), // (1)
name: "soo",
age: 34,
grade: "A+"
hobby: ["game", "golf"],
image: {
url: "https://simonjisu.github.io",
caption: "",
type: "jpg"
}
}
-
_id
필드가 primary key 가 된다. 알아서 생성되거나 직접 부여할 수도 있다.
이런 형태는 많은 다른 프로그래밍 언어의 기본 데이터 유형에 해당하여 매우 친숙하다(e.g., Python - dict
). 그리고 다양한 스키마를 유연하게 정의할 수 있다.
Collections / Views / On-Demand Materialized Views¶
콜렉션(collections)은 도큐먼트들(documents)의 그룹이다. RDBMS에서 Table에 해당한다. 뿐만 아니라 standard views와 on-demand materialized view를 제공한다. 둘의 차이점은 다음과 같다.4
- standard views는 view를 읽을때 계산되며, 디스크에 저장되지 않는다.
- on-demand materialized views는 디스트에 저장어 읽는다.
$merge
혹은$out
스테이지를 사용하여 저장된 데이터를 업데이트 한다.
Features¶
High Performance¶
- Embedded Data Modeling 지원하여 I/O(Input/Output) activity을 줄인다. 아래 예제 처럼 하나의 도큐먼트에 담을 수 있는 내용을 일반적인 Normalized Data Modeling에서 읽고 쓰려면 2~3 개의 도큐먼트를 사용해야 한다.
Example
{
_id: <ObjectId1>,
name: "soopace",
contact: { // (1)
phone: "010-1234-1234",
email: "simonjisu@gmail.com"
},
register: { // (2)
class_names: ["Big Data", "Machine Learning"]
}
}
- Embedded
contact
sub-document - Embedded
register
sub-document
- MongoDB는 다양한 Indexes를 지원하여 더 빠르게 검색을 수행할 수 있게 도와준다.5 Indexes의 데이터 구조는 B-Tree로 구현되어 있다.
Query API¶
CRUD(create, read, update, and delete)6 Operation 을 지원한다. 뿐만아니라 Data Aggregation7, Text Search8 그리고 Geospatial Queries9 도 수행할 수 있다.
High Availability¶
MongoDB의 레플리케이션(복제, Replication)은 "replica set"10라는 것을 통해서 이루어 진다. 보통 서버, 네트워크 장애가 발생할 때를 대비해 데이터를 중복하여 저장하는 방식을 레플리케이션이라고 한다. 예를 들어 서비스 사용자가 많아져 Database의 부하가 커질 때를 대비해, 복사본에서만 Select작업을 수행하고, 다른 명령어는 기존 Master 노드에서 처리하게 할 수도 있다. Replica Set을 통해서 MongoDB 또한 여타 다른 데이터 베이스와 마찬가지로 자동 장애 조치(automatic failover), 데이터 중복성(data redundancy) 특징을 제공한다.
Horizontal Scalability¶
- 샤딩(Sharding)11을 통해 데이터를 클러스터에 분산시킬 수 있다.
참고하면 좋은 자료¶
- 오래된 좋은 MongoDB 강좌
- MongoDB란 - 역사, 설계 목표, 핵심 기능, 몽고DB를 사용하는 이유
- MongoDB Data Modeling
- Database의 샤딩(Sharding)이란?