MongoDB 란 ?
mongoDB는 NoSQL(Not only SQL)의 일종으로 document database이다. mongoDB는 데이터 레코드를 BSON 문서로 저장한다. BSON은 JSON의 이진 표현이며, 더 많은 데이터 유형을 포함한다.
NoSQL 이란 ?
NoSQL은 관계형 데이터베이스의 단점을 해결하기 위해 등장했다.
- 데이터를 시각적으로 확인하기 좋다
- JOIN 없이 조회가 가능하므로 응답 속도가 빠르다.
- 스키마가 유연해서 데이터 모델을 서비스의 요구사항에 맞게 데이터를 수용할 수 있다.
Document 구조
mongoDB document는 field-value 쌍으로 구성되며 아래와 같은 구조를 갖는다
{
field1: value1,
field2: value2,
field3: value3,
...
fieldN: valueN
}
필드 값은 다른 document, 배열 및 document 배열을 포함한 BSON 데이터 유형 중 하나일 수 있다. 예를 들어 아래 document에는 다양한 유형의 값이 포함되어 있다
var mydoc = {
_id: ObjectId("5099803df3f4948bd2f98391"),
name: { first: "Alan", last: "Turing" },
birth: new Date('Jun 23, 1912'),
death: new Date('Jun 07, 1954'),
contribs: [ "Turing machine", "Turing test", "Turingery" ],
views : NumberLong(1250000)
}
_id: ObjectId 를 보유한다.name:first,last필드를 포함하는 embedded document를 보유한다 .birth,death: Date 유형의 값을 보유한다.contribs**: 문자열 array를 보유한다.views: NumberLong 유형의 값을 보유한다.
Dot notation
MongoDB 는 dot notation 을 사용해서 배열이나 document 내의 요소에 접근한다.
array
{
...
contribs: [ "Turing machine", "Turing test", "Turingery" ],
...
}
"contribs.2"
embedded document
{
...
name: { first: "Alan", last: "Turing" },
contact: { phone: { type: "cell", number: "111-222-3333" } },
...
}
contact.phone:{ type: "cell", number: "111-222-3333" }contact.phone.type:“cell”
Document 크기 제한
- BSON document의 최대 크기는 16MB
- 단일 document가 과도한 양의 RAM을 사용하거나, 전송 중에 과도한 양의 대역폭을 사용하지 않도록 하기 위해 단일 document의 크기를 제한한다.
- 최대 크기보다 큰 document를 저장하려면, MongoDB에서 제공하는 GridFS API를 사용하면 된다 !
Document 순서 제한
JavaScript 개체와 달리 BSON document의 필드는 순서가 지정된다.
document를 비교할 때 필드 순서가 중요하다
a예를 들어 문서를 필드 와b쿼리 에서 비교할 때 :{a: 1, b: 1}=={a: 1, b: 1}{a: 1, b: 1}!={b: 1, a: 1}
RDBMS와 비교
| RDBMS | MongoDB (NoSQL) |
|---|---|
| database | database |
| table | collection |
| tuple / row | document |
| column | key / field |
| table join | embedded documents |
| primary key | primary key (_id) |
document를 사용함으로써 얻는 이점
- document는 많은 프로그래밍 언어의 기본 데이터 유형에 해당한다.
- embedded document 및 array는 비용이 많이 드는 join의 필요성을 줄인다.
- dynamic schema는 능숙한 다형성을 지원한다.
Collections/Views/On-Demand Materialized Views
- mongoDB는 document를 collection에 저장한다
- collection 이외에 지원하는 것들
- Read-only Views (Starting in MongoDB 3.4)
- On-Demand Materialized Views (Starting in MongoDB 4.2).
Key Feature ✨
-
High Performance
mongoDB는 고성능 data persistance를 제공한다 !
- embedded data model로 데이터베이스 시스템의 I/O 활동이 줄어든다
- 인덱스는 더 빠른 쿼리를 지원하고 embedded document 및 array의 key를 포함할 수 있다
-
Query API
CRUD(읽기 및 쓰기 작업) 와 다음을 지원한다.
-
High Availability
replica set 이라고 하는 MongoDB의 복제 기능은 다음을 제공한다
- automatic failover
- data redundancy
-
Horizontal Scalability
MongoDB는 수평적 확장성을 제공한다 !
-
Support for Multiple Storage Engine
여러 스토리지 엔진을 제공한다
- WiredTiger Storage Engine (including support for Encryption at Rest)
- In-Memory Storage Engine.
MongoDB 기본 Database
- admin
- 인증과 권한 부여 역할
- shutdown 등 명령어는 해당 DB에 대한 접근이 필요
- local
- replication에 필요한 oplog와 같은 컬렉션을 저장
- instance 진단을 위한 startup_log와 같은 정보를 저장
- 복제 대상에서 제외
- config
- sharded cluster에서 각 shard의 정보를 저장