참조 자료
MongoDB의 기본 개념 알아보기 | SKplanet Tacademy
https://youtu.be/81JnYGT2HVQ
[MongoDB] 소개, 설치, 데이터모델링
https://velopert.com/436
RDBMS 와 MongoDB 비교
https://javacpro.tistory.com/66
Database와 Collection | MongoDB 공식문서
https://www.mongodb.com/docs/manual/core/databases-and-collections/
정리
Keyword
Document
- RDBMS의 record와 유사
- key-value pair의 구조
{
_id: ObjectId("00000020f51bb4362eee2a4d"),
name: { firstname: "제인", lastname: "오스틴" }
}
- 동적인(dynamic) schema를 갖고 있음
같은 Collection 내 Document 끼리 서로 다른 schema 를 가질 수 있음
= 서로 다른 데이터(key) 들을 가질 수 있음.
Collection
- RDBMS의 table과 유사
( ↔️ Document가 동적인 schema 를 갖고 있으므로 Collection은 schema 가 없음)
- MongoDB Documnet의 그룹
Database
비교
RDBMS | MongoDB |
---|
Database | Database |
Table | Collection |
Tuple, Row | Document |
Column | Key, Field |
기본 개념
정의
MongoDB is a source-available cross-platform document-oriented database program.
오픈소스 문서지향(document-oriented) 데이터 모델을 사용한 교차 플랫폼(cross-platform) 데이터베이스 프로그램
특징
- NoSQL(Not only SQL) : 관계형DB의 한계 극복 / 고정된 스키마, JOIN이 없음
- 메모리맵 형태의 파일엔진 DB -> 성능 = 메모리 크기
- 적합한 경우: 삭제 없이 쌓아놓는 ex) 로그데이터, 이벤트참여내역, 세션
- 부적합 경우: 트랜잭션이 필요한 ex) 금융, 결제, billing, 회원정보 (=> RDBMS)
- 빅데이터 처리 특화 but, OS메모리가 차면 HDD로 데이터처리하여 속도 급저하 -> 하드웨어 투자 필요!
Document(도큐먼트) 데이터 모델
- 속성의 이름-값 쌍의 집합
- 속성: 문자열, 숫자, 날짜, 배열, 다른 도큐먼트 지정
- 하나의 도큐먼트에 필요정보 모두 담아야 한다(Embedded Document)
- one query로 할 수 있게 collection model 설계해야한다(join이 없다❓)
도큐먼트 형태의 구조
- 중괄호로 시작해서 끝나는 형태가 곧 하나의 도큐먼트 구조임.(JSON)
장점
- schema-less 구조: 다양한 형태의 데이터 저장, 데이터모델의 유연한 변화(모델변경, 필드 확장 용이)
- Read/Write 성능 우수
- Scale out 구조: 대량 데이터 저장, 장비 확장 용이
- JSON 구조: 데이터 직관적으로 이해
- 사용 용이, 개발 편리성
단점
- 데이터 업데이트 중 장애 발생 시 손실 가능
- 많은 인덱스 사용 시, 충분한 메모리 확보 필요
- RDBMS 대비 데이터 공간 소모 많음(key 중복 입력: 비효율)
- 복잡한 join 시 성능 제약❓
- RDBMS 대비 트랜잭션 지원 미약
- Hadoop 대비 MapReduce 작업 성능 낮음
❓ MongoDB에 JOIN이 있다? 없다?
👉 MongoDB는 NoSQL이라 JOIN이 없다고 그러더니 복잡한 join 시~라는 말로 참 헷갈리게 한다-_- 검색해보니 쿼리에 한해서 $lookup
이라는 유사 기능이 있다고 함. 이하 참조(https://velog.io/@byron1st/MongoDB-쿼리에서-Join-하기, https://joyful-development.tistory.com/21)
주요기능
- MongoDB 복제: master-slave 구조, slave에 복사본 배치해 master 장애 시 slave를 master로 선출(무중단 서비스)
- MongoDB 샤딩: 대용량 데이터 분산 저장(소프트웨어적으로 DB 처리). DB를 테이블 단위로 분리 또는 테이블 자체를 분할하는 방법.
분산DB의 3계층 구조 지원(응용, 중개자, 데이터 계층). 추상화된 하나의 DB가 존재하는 것처럼 운용.
- MongoDB 맵리듀스: 대용량 데이터를 분산 연산하여 안전하고 빠르게 처리.