NoSQL - Mongo DB
MongoDB?
- 문서 지향 데이터베이스 (Document-Oriented Database)
- NoSQL(Not-Only SQL)중 하나 (RDBMS X, SQL사용 X)
- C++로 제작
- NoSQL 중 인지도 1위
- MySQL의 테이블 같은 스키마가 고정된 구조가 아닌 JSON형태의 동적 스키마형 문서 제공(BSON이라고 함)
- Document : 가장 기본적인 데이터(MySQL의 row에 해당)
- Collection : 문서(Document)의 집합
- DB : Colletction의 집합
Document
- JSON형태의 Key-Value 쌍으로 이루어 짐
- _id ==> RDBMS의 Primary Key와 같은 개념
특징
- 빅데이터나 실시간 웹 애플리케이션에 널리 사용
- 스키마가 없음
- 스키마가 존재 : 그 구조가 미리 정의되어 있어야 한다.
- 스키마가 사전에 정의되지 않아도 된다 : 다양한 필드를 가질 수 있다.
- 다양한 인덱싱 제공
- Auto Sharing 가능 : Primary Key 기반 여러 서버에 데이터를 나누는 scale-out 가능
- 별도 스토리지 엔진 통해 파일 저장 가능
- 다양한 쿼리 제공
+
- RDBMS보다 빠름
- 스키마 관리 필요 없음, 어떤 형태의 데이터도 저장 가능
- JSON형태로 저장 : 직관적
- 데이터 읽고/쓰기 빠름
- scale-out 구조 : 하나의 장비에서 처리하던 일을 여러 장비에 나눠서 처리할 수 있는 확장 기능 --> 쉽게 운영 가능
- auto-sharing : 데이터를 여러 서버에 분산해서 저장하고 처리할 수 있도록 하는 기능
- 비동기 드라이버 사용 가능
-
- 복잡한 쿼리 사용 X
- 메모리 사용량 큼
- 정합성 떨어짐
- SQL을 완전히 이전 X
- 데이터 일관성 보장 X
적절
- 로그성 데이터, 빅데이터 처리의 중간 저장소
- RDBMS보다 성능 우월, 파일보단 다양한 유틸성 기능, 검색에 유연
- 설정 데이터 보관소
- 검색 조건의 다양화가 필요한 경우 유용
- null 필드가 많이 존재
- 데이터에 null 필드가 가변으로 다양하게 존재 --> RDBMS보다 효율이 좋음
- 집계 연산, paging
참고
https://www.byfuls.com/programming/read?id=60
https://elky84.github.io/2018/09/26/mongodb/