본문 바로가기

MongoDB

DocumentDB 개요

1. DocumentDB란??


DocumentDB란 AWS에서 제공하는 MongoDB 호환 NoSQL 완전 관리형 데이터베이스 서비스.
이름처럼 MongoDB와 동일하게 NoSQL의 여러 종류 중 하나인 Document store로 구성되어 있으며, 데이터를 문서(대부분 json) 형태로 데이터를 저장한다.
DocumentDB는 메이저 버전으로만 관리되며 현재 3.6, 4.0, 5.0 3개의 버전이 릴리즈 되어 있다. AWS 에서는 MongoDB 3.6, 4.0 및 5.0 API를 구현하여 모든 기능에 호환된다고 주장한다.

2. DocumentDB와 기존 RDBMS의 차이점

  • 용어의 차이 : 기존 관계형 데이터베이스와 다르게 Document store 형태로 구성되어 있기 때문에 테이블, 로우, 컬럼 등의 용어를 사용하지 않는다.
  • 상세
    DocumentDB RDBMS
    데이터베이스 데이터베이스
    컬렉션 테이블
    다큐먼트 로우(행)
    필드 컬럼
  • Schema-less : DocumentDB는 스키마 없이 데이터의 CRUD가 가능하기 때문에 매우 유연하다. 컬렉션 내 각각의 Document는 서로 다른 Filed를 가질 수 있음. 그에따라서 데이터 모델의 유연한 변경이 가능하다.
  • NoSQL : 전통적인 SQL을 사용하지 않고, 자바스크립트 스타일의 쿼리를 사용하므로 개발자에게 친숙함
  • 데이터 저장방식 : 데이터 자체를 BSON 형태로 압축하여 저장하기 때문에 데이터 용량이 더 작음

3. DocumentDB와 MongoDB의 차이점

 

AWS 측에서는 DocumentDB는 MongoDB와 전부 호환된다고 하지만 MongoDB 입장에서는 매우 다른의견이다.
MongoDB API 테스트의 약 35%정도만 통과했다고 한다. (https://www.mongodb.com/compare/documentdb-vs-mongodb)

 

  • 스토리지 아키텍처: DocumentDB는 Aurora와 동일한 아키텍처를 사용한다. Compute node와 Storage node를 분리해서 사용하고 3개의 AZ에 6개의 쿼럼을 등록하는 방식으로 가용성을 유지하고 있다.
  • 수평 확장 지원 유무(Sharding): 위의 처럼 Aurora의 스토리지 아키텍처를 사용하기 때문에, Sharding을 지원하지 않는다.(Elastic cluster(?) 에서는 지원한다고 하나 사용 레퍼런스 없음).
    MongoDB의 핵심적인 기능인 샤딩을 통한 Write 성능 개선이 불가하다는 단점이 있다.
  • 다양한 파라미터 미지원  : Wiredtiger 스토리지 엔진을 사용하지 않기 때문에 MongoDB 운영 시 확인 해야 했던 관리포인트(ex) 체크포인트 관리, 이빅션관리, 커서관리, 메모리관리가 필요없다.
  • 완전 관리형 서비스 : AWS가 백업, 모니터링 메트릭 제공등의 관리 포인트를 일부 제공하고 있기 때문에 oplog를 관리할 필요가 없다.

 

결론적으로 DocumentDB는 MongoDB와 같은 DocumentDB Store NoSQL이지만 DBA 입장에서는 매우 다른 관리포인트로 접근해야 한다.

4. CRUD 쿼리

 

DocumentDB는 MongoDB에서 사용되는 표준 CRUD(insert, select ,update, delete ) 문법을 사용한다. 

 

  • insert: document를 만들려면 insertOne() 또는 insertMany()를 사용하여 컬렉션에 새 Document 를 삽입할 수 있다. 만약 컬렉션이 없다면 insert 쿼리를 수행한다면 컬렉션이 생성된다.
  • find(select): document를 읽으려면  find()를 사용하여 특정 기준에 따라 문서를 검색할 수 있다.
  • update: document 업데이트는 updateOne() 또는 updateMany()를 사용한다. 
  • Delete: document를 삭제하려면 deleteOne() 또는 deleteMany() 를 사용한다.

5. 집계 쿼리

 

DocumentDB에서는 위의 CRUD 쿼리 처럼 cursor method 사용 (ex)., db.col.find() )과 aggregate framework를 사용하는 쿼리가 (e.g., db.col.aggregate([{$match: ...},{$group: ...]))이 있다.
Aggregation을 사용하면 group by 등과 같은 복잡한 쿼리를 사용 가능하다.


6. 데이터 모델링

 

DocumentDB에서 데이터를 모델링할 때는 Embedded Model과 Reference Model이라는 두 가지 기본 옵션이 있다.

 

  • Embedded Model: Embedded Model에서는 관련 데이터가 한개의 컬렉션, Document에 내장되어 저장된다. 
  • Reference Model: Reference Model에서 데이터는 여러 컬렉션으로  분할되고 문서 간의 관계는 참조 를 사용하여 설정된다.