Search
Duplicate

MongoDB

: Document Database(NoSQL)로 웹 어플리케이션과 인터넷 기반을 위해 설계된 데이터베이스 관리 시스템
: 데이터 모델과 지속성 전략을 높은 읽기/쓰기 효율과 자동 장애조치를 통한 확장의 용이성을 염두에 두고 만들어졌음
: 애플리케이션에서 필요한 데이터베이스 노드가 하나이거나 혹은 그 이상이거나 관계없이 MongoDB는 좋은 성능을 보여줌
⇒ 관계형 데이터베이스 관리 시스템에 비해 확장에 있어서 자유로움
: 직관적인 데이터 모델, 행 대신 도큐먼트에 데이터를 저장하는데, 다음과 같음
{ _id: 10, username: 'jade', email: 'abc1@test.com' }
Plain Text
복사
: 사용자의 정보를 단순 몇개의 필드로 저장하고 있음, 이와 같은 모델의 장점은 각각의 사용자에 대해 여러개의 이메일 주소를 저장하는 경우, 관계형 모델에서는 서로 조인을 위해 이메일 주소와 사용자 테이블을 각각 만들어주어야 함. 하지만 MongoDB에서는 다음과 같이 표현이 가능함
{ _id: 10, username: 'jade', email: [ 'abc1@test.com', 'abc2@test.com' ] }
Plain Text
복사
⇒ 즉 개발자 입장에서 테이블의 변경이 발생하였을 때, 테이블을 추가하거나 스키마를 맞춰야하는 걱정없이 구조화된 도큐먼트를 데이터베이스에 저장할 수 있음
: MongoDB의 도큐먼트 형식은 임의의 데이터 구조를 저장하는 스키마로 잘 알려진 JSON에 기반함

MongoDB의 핵심 기능

1.
도큐먼트 데이터 모델
: MongoDB는 도큐먼트 지향적인 데이터베이스임
{ _id: ObjectID("4bd9e8e17cefd644108961bb"), <-- _id 필드가 프라이머리 키 title: "Adventures in Databases", url: "http://example.com/databases.txt", author: "msmith", vote_count: 20, tags: ["databases", "mongodb", "indexing"], <-- 태그는 문자열의 배열로 저장 image: { <-- 속성이 또 다른 도큐먼트를 가리킴 url: "http://example.com/db.jpg", caption: "", type: "jpg", size: 75381, data: "Binary" }, comments: [ { user: 'bjones', text: 'Interesting article!' }, { user: 'blogger', text: 'Another related article is at http://example.com/db/db.txt' } ] }
JSON
복사
: 위에서 볼 수 있듯, 도큐먼트는 본질적으로 속성의 키와 값으로 이루어진 쌍의 집합,
2.
스키마리스 모델의 장점
: 스키마가 없다는 것은 데이터베이스가 아닌 애플리케이션이 데이터 구조를 정하며 이는 초기단계에서 생산성의 향상을 불러옴
: 가변적인 속성을 갖는 데이터 표현이 가능해짐, 형태가 정해지지 않은 데이터를 미리 표현하고 추후에 수정이 가능함
: 도큐먼트로 데이터 모델링을 진행하면 조인이 필요 없고 새로운 속성은 한 도큐먼트에 동적으로 추가가 가능
3.
Ad hoc 쿼리
: MongoDB의 설계 목표 중 하나는 관계형 데이터베이스 상에서 매우 필수적인 쿼리 언어 성능을 유지하는 것
: 문서를 저장하고 조회 목적에 맞는 조회방법을 제공하며 값, 범위, 정규식 검색등을 지원함
4.
인덱스
: MongoDB도 관계형 데이터베이스에서 필수적으로 사용하는 인덱스를 지원하며 인덱스는 B-Tree로 구현되어있음
: 대부분의 데이터베이스는 각 도큐먼트 또는 각 행의 기준을 위한 고유의 식별자로 프라이머리 키를 부여함
5.
복제
: Replica Set라고 부르는 구성을 통해 데이터베이스 복제 기능을 제공함
: 복제 기능은 서버와 네트워크 등의 장애가 발생할 경우를 대비해 중복성 관리와 장애조치 자동화를 위해 데이터를 여러 서버에 분산 저장
6.
속도와 내구성
: 일반적으로 데이터베이스 시스템에서 쓰기 속도와 내구성 사이의 관계는 상충적임
: MongoDB의 경우, write semantics와 journaling을 통해 속도와 내구성 사이에 타협을 이룸
7.
확장의 용이
: 범위 기반 파티션 메커니즘을 통해 데이터를 여러 노드에 분산하는 것을 자동으로 관리해줌