Database/MongoDB

[MongoDB] MongoDB 아키텍처 MMAPv1, WiredTiger

꽁담 2024. 5. 10. 22:24

아키텍처

초보자 입장에서 바라보는 아키텍처이다.

1) 프로그래머는 프로그래밍 언어를 사용하여 개발을 한다.

2) 이 코드는 MongoDB Driver 를 거쳐 컴파일 되고 MongoDB 를 사용할 수 있다.

3) 네트워크를 통해 MongoDB 요청을 전달한다.

4) MongoDB 의 쿼리프로세서, 샤드 매니저 등등은 이 데이터가 어디에 위치하는지 쿼리는 괜찮은지 유무를 파악한다.

5) 모든게 통과되면 스토리지엔진 API 를 통해 데이터를 디스크로부터 읽어들인다.

 

스토리지 엔진

가장 하위에 위치한 MMAPv1 과 WiredTiger 등을 스토리지 엔진이라고 하며

디스크에 영구적으로 기록하거나 다시 읽어와서 메모리에 적재하는 역할을 담당한다.

 

MySQL 서버와 같이 다양한 스토리지 엔진을 사용할 수 있도록 플러그인 형태로 되어있지만

MongoDB 는 MySQL 과 달리 하나의 인스턴스에서 하나의 스토리지만 사용할 수 있다.

다만 하나의 클러스터에서 서로 다른 노드(=인스턴스가 다른)는 서로 다른 스토리지를 사용해도 무방하다.

 

참고로 제일많이 사용되는 엔진은 WiredTiger 이다.

 

스토리지 엔진 종류

위에서 설명한 거와 같이 MongoDB 는 다양한 스토리지 엔진을 사용할 수 있다.

다만 사용자들이 실행하는 쿼리는 스토리지 엔진과 직접적인 연관은 없기에

MMAPv1 에서 WiredTiger 로 엔진을 변경하더라도 응용 프로그램은 거의 변경하지 않아도 된다.

 

MMAPv1

MongoDB 가 처음 출시됐을 때부터 사용되던 스토리지 엔진이다.

단점이 명확하여 현재는 대부분 WiredTiger 를 사용한다.

 

WiredTiger

MongoDB 3.0 부터 도입된 새로운 스토리지 엔진이다.

 

In-Memory

WiredTiger 스토리지 엔진을 변형하여 데이터를 디스크에 기록하지 않고 메모리에만 보관하는 스토리지 엔진이다.

 

RocksDB

페이스북에서 LevelDB 를 커스터마이징하여 개선한 스토리지 엔진이다.

 

TokuDB

Percona 에서 개발중인 스토리지 엔진이다.

 

스토리지 엔진 비교

기능 MMAPv1 WiredTiger (in-memory) RocksDB TokuDB
잠금 수준 컬렉션 도큐먼트 도큐먼트 도큐먼트
데이터 구조 B-tree B-tree LSM Fractal-Tree
캐시 X (운영체제 캐시를 사용) O O O
세컨드리 인덱스 O O O O
데이터 압축 X O O O
인덱스 압축 X O O O
암호화 X O X X