Mongo DB

No SQL제품중에는 제일 순위가 높을 정도로 현재 DB시장에서 Mongo DB는
실제 서비스에서도 많이 쓰이는 DB이다.
Mongo DB의 특징
- Mongo DB는 다른 관계형 DB와 다르게 스키마 구조가 존재하지 않는다.
따라서 데이터 중복이 빈번하게 발생한다.
- join을 할 수 없다
- Mongo DB와 관계형 DB의 객체 차이
Mongo DB | 관계형 DB |
---|
데이터베이스 | 데이터베이스 |
컬렉션 | 테이블 |
도큐먼트 | 로우 |
필드 | 칼럼 |
인덱스 | 인덱스 |
- 쿼리문이 개발자에게 더욱 친화적이다.
- 칼럼 추가가 유연하다.
Mongo DB replica set

- Mongo db의 replica set은 최소 3대로 구성해야한다.
- 각 서버는 모두 동일한 데이터를 가지고 있어 한대가 죽더라도 나머지가 가지고 있다는 장점이 있지만 이는 세 서버 모두 동일하게 데이터를 가지고 있어야 하기 때문에 동기화와 관련해 문제가 있을 수 있음으로 단점이 될 수 있다.
- replica set은 HA를 위해 과반수 이상이 동작할 때 투표를 진행해야 하기 때문에 홀수로 구성해야 한다.
- 데이터가 2TB가 넘어가게 된다면 샤딩을 수행하는 것이 좋다.
- 아비터 노드 : 데이터는 없고 투표만 하기 위해 존재하는 노드

- P-S-S : 두 노드 모두 세컨더리로 구성한다.
- P-S-A : 하나를 아비터 노드를 두어 하드웨어 부담을 줄인다.
Mongo DB sharding
예시 구조

- 설명
- replica set은 샤딩을 통해 2set로 나눠진다
- config server는 어떤 데이터가 어디에 있는지 저장한다.
만약 어디에 있는지 잃어버리면 고아 도큐먼트가 발생한다.
- mongo DB 라우터는 직접 쿼리를 받는 부분이다.
mongo DB 라우터 또한 3개로 구성해 Connection Stream을 만들고
어느 곳에 접근해도 동일하게 데이터를 받을 수 있게끔 구성한다.
- 특징
- Mongo DB는 오토 샤딩을 지원하여 쉽게 샤딩을 할 수 있다.
- 최신 버전의 Mongo DB는 샤딩으로 인한 속도 저하는 크게 체감이 되지 않는다.
- Mongo DB버전을 업데이트 할 경우 각 서버를 한대씩 HA를 수행하며 업데이트를 할 수 있다.
Mongo DB 사용시 주의사항
- Mongo DB enterprise 버전은 core 개수가 아닌 메모리 사이즈를 기준으로 구매할 수 있다.
Mongo DB는 메모리 쿼터를 설정할 수 없기 때문에 주의해서 사용해야한다.
- index가 없을 경우 RDB보다 속도가 느릴 수 있다.
- collection 하나당 두 개의 데이터 파일을 생성함으로 collection을 계속 만드는
구조의 프로그램은 I/O속도에 문제가 있을 수 있다.
- 샤딩 구조에서 DBACL은 제대로 동작하지 않을 수 있으므로
replica set과 stand alone 구조에서만 사용하고 샤딩 구조에서는 IP Table을 사용한다.
IP Table은 Mongos(Mongo DB 라우터)부분에만 적용하면 된다.
Mongo DB 백업
- enterprise 버전은 OPS매니저라는 관리툴이 존재하여 모니터링, 백업등에 도움을 받을 수 있다.
- community 버전의 경우 mongodump를 사용하여 백업을 할 수 있지만 데이터가 클 경우 속도에 문제가 있을 수 있다.
따라서 리눅스의 lvm백업을 이용하는 방식으로 백업을 수행할 수 있다. (ex : 카카오 RBAM)
추가 공부
Mongod vs Mongos
Mongod
- 데이터베이스를 실행하는 기본 데몬 프로세스
- 데이터 저장 및 작업을 처리하는 주요 데이터베이스 서버 프로세스
Mongos
- 클라이언트로부터 쿼리를 수신하여 샤드 클러스터의 적절한 샤드로 라우팅하는
데몬 프로세스
- 샤드 클러스터에서 쿼리 라우팅 및 로드 밸런스를 수행하는 라우터 프로세스
참고자료
Mongo DB 교육
https://meetup.nhncloud.com/posts/275
https://www.mongodb.com/docs/manual/reference/program/mongod/
https://www.mongodb.com/docs/manual/core/replica-set-architecture-three-members/