본문 바로가기
기술면접/데이터 베이스

[데이터베이스] MongoDB란

by illlilillil 2022. 3. 2.

[MongoDB]

C++로 작성된 오픈소스 문서지향적 크로스 플랫폼 데이터베이스입니다. 뛰어난 확장성과 성능을 보여줍니다.

 

[NoSQL]

기존의 RDBMS의 한계를 극복하기 위해서 만들어진 데이터 저장소입니다. RDBMS에 있는 JOIN나 정규화가 없습니다.

 

[문서(Document)란?]

Document란 RDBMS의 record와 비슷한 개념입니다. 한 개 이상의 key-value 짝으로 이뤄져 있습니다.

JSON 형식과 굉장히 비슷한 구조로 보입니다. 도큐먼트는 동적 스키마를 가지고 있습니다. 같은 Collection의 Document끼리라도 다른 스키마를 가지고 있을 수 있습니다.

 

예시

_idsms 12bytes의 값으로 RDBMS의 기본키 역할을 합니다.

첫 4bytes는 현재 timestamp, 3bytes는 machine id, 2bytes는 MongoDB ProcessId, 마지막 3bytes가 순차 번호로 값이 높아집니다.

{
    "_id": ObjectId("5099803df3f4948bd2f98391"),
    "username": "velopert",
    "name": { first: "M.J.", last: "Kim" }
}

[Collection이란?]

콜렉션은 Documentd의 집합입니다. Collection 내부에 Document가 위치하고 있습니다.

 

[장점]

  • 스키마가 없습니다. 객체 구조가 뚜렷합니다. 복잡한 JOIN이 없습니다.
  • 쌓아놓고 삭제가 없는 경우가 제일 적합합니다. (로그 데이터나 세션)
  • Read & Write 성능이 좋습니다. 캐싱이나 많은 트래픽을 감당할 수 있습니다.
  • 처음부터 Scale Out 구조를 택해서 운용이 쉽습니다. Auto Sharding 지원
  • SQL만큼 강력한 쿼리 성능을 제공합니다.
  • JSON 형태로 저장이 가능해서 직관적이며 개발이 편리합니다.

[단점]

  • 정합성이 떨어지므로 트랜잭션이 필요한 경우엔 부적합합니다.(금융, 결제, 회원 등)
  • 메모리 관리를 OS에게 위임하기 때문에 메모리 성능에 의존합니다.
  • B트리를 이용해 인덱스를 생성하기 때문에 크기가 커질수록 데이터 입력, 삭제 시 성능이 저하됩니다.

댓글