[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트리를 이용해 인덱스를 생성하기 때문에 크기가 커질수록 데이터 입력, 삭제 시 성능이 저하됩니다.
'기술면접 > 데이터 베이스' 카테고리의 다른 글
[데이터베이스] MongoDB DB 생성 및 제거 (0) | 2022.03.02 |
---|
댓글