1. MongoDB의 특장점

  • MongoDB는 Document DB라고도 불린다. Data를 저장할 때 문서화된 형태로 저장을 한다. (cf. RDBMS: row-column기반의 Table로 저장)
  • Document는 JSON Format을 사용하는데, 실제 저장은 BSON 형식(Binary JSON Format)으로 저장된다.
  • DocumentDB이기때문에 Table 기반의 RDBMS보다 쿼리가 짧고, Schema가 유연하다.

DocumentDB vs RDBMS 예제 1: "전문 분야가 Trader인 사람들의 자동차와 사는 도시 이름은?" 문제의 해결 과정 비교

  • RDBMS: 3개의 table을 Join 한다.
  • DocumentDB: db.users.find() 구문으로 Users Collection을 탐색한다.(Collection: table과 매칭되는 개념)
    → DocumentDB는 JOIN이 불필요하며, 쿼리가 RDB보다 간단하다.

DocumentDB vs RDBMS 예제 2: 새로운 category 추가 과정 비교

  • DocumentDB: 특정 User document에 school이라는 field로 value를 추가하면 된다.
  • RDBMS: Users Table에 새로운 column을 추가하거나, 새로운 Table을 추가한다. Table, Column을 추가하는 경우, 하나의 user document에 field 하나만 추가하면 되는 MongoDB와 비교할 때 오버헤드가 발생한다.
    → 특수한 데이터 카테고리의 추가 과정은 RDBMS보다 DocumentDB가 효율적이다.

 


2. MongoDB 용어 및 개념 정리

2.1. Document

1개 이상의 Field-Value Pair를 포함한 JSON 형식의 문서를 말한다. RDBMS 기준으로는 Row에 해당한다.

Field의 추가가 손쉬운 DocumentDB의 특성상, 여러 Table의 row를 동시에 지정한 것과 대응되는 Document도 존재할 수 있다. (DocumentDB vs RDBMS 예제 2 참조)

2.2. Field

Value를 저장하고 불러오는 Key의 역할을 한다. RDBMS에서의 Column과 대응된다. 

Value의 자료형은 다음 네가지가 있다: String, Number, Geo location, Array

Value 예시(자료형 ← 변수명):

  • String ← first_name, surname, cell, city  
  • Geo location ← location
  • Number ← year
  • Array ← profession

2.3. Collection

여러 Document의 집합이다. RDBMS의 기준으로는 여러 Row의 집합인 Table과 비견할 수 있다.

2.4. Database

여러 Collection의 집합이다. RDBMS 기준으로도 Database이며, 여러 Table의 집합이라는 점에서 차이가 있다.

2.5. Index

Collection에 대한 Link를 말한다. RDBMS 기준으로도 Index이며, 링크 대상이 Row인 점에서 차이가 있다.(차후 설명)

2.6 Embedding

DocumentDB에서는 "같이 조회되는 데이터는 같은 Document에 저장하라"라는 원칙을 기반으로 데이터를 document로 묶는 방식을 말한다.

DocumentDB vs RDBMS 예제 2에서 "student"라는 이름의 새로운 카테고리가 발생하는 경우, DocumentDB에서는 같이 조회되는 데이터일 경우에는 같은 Document에 포함시키는 반면, RDBMS에서는 정규화하면 "student" Table을 두게 된다.

이 사례에서 Embedding된 Collection과 동일 내용의 Row를 얻기 위해서는 두 테이블을 JOIN해야 하므로, DocumentDB의 Embedding이 RDBMS의 JOIN과 대응된다.

RDBMS와 큰 차이가 있는 요소이다.

2.7. Database References

Document 내 Field의 개수가 100, 200 등 사이즈가 비대해지는 경우에는 비효율성이 초래될 수 있는데, 이 경우에는 중복되는 data를 서로 다른 Document로 분리한 후, 참조하게 만들 수 있다.

RDBMS에서 마치 Table간 Join하는 것과 유사하다. 

DB level Join과 Application level join 중에서 후자에 속한다.

2.8. $lookup

하나의 collection으로부터 특정 field 간의 조건을 이용하여 여러 collection을 join 할 수 있는 방법이다.

RDBMS의 left outer join과 대응된다.

DB level Join과 Application level join 중에서 전자에 속한다.

2.9. $graphLookup

서로 다른 collection(document), 또는 같은 collection(document) 내 서로 다른 field에 대해서 parent와 Child를 지정하면, 귀납적으로 탐색하여, 전체적인 Tree구조를 Output으로 내보내는 역할을 한다.

하나의 Table로부터 재귀적으로 특정 row를 찾는, Oracle DB의 Connect by 절과 유사한 개념이다.

2.10. Multi-Document ACID Transaction

하나의 collection 또는 여러 collection에 걸친 여러 document에 대하여 여러 단계의 read, write 기능이, 나누어질 수 없는 연산인 경우에 사용한다.(Atomicity)

마치 RDBMS의 Transaction이 전체 연산이 성공하거나 전체 연산이 실패하거나(Rollback)의 두 결과만 용납하는 것과 유사하다.

MongoDB 4.0, 4.2버전에서 신설, 업데이트된 기능으로써, 이전 버전에서 데이터의 정합성 확보가 어려웠던 단점을 개선하기 위한 기능이다.