쌓아놓고 삭제가 없는 경우에 적합하다.
ex) 로그 데이터, 이벤트 참여 내역, 세션
트랜잭션이 필요한 금융, 결제, 빌링, 회원정보등은 RDBMS를 사용해야한다.
도큐먼트 데이터 모델
- 속성의 이름, 값으로 이루어진 쌍의 집합
- 속성은 문자열/숫자/날짜
- 배열/다른 도큐먼트를 지정할 수 있다.
- 하나의 document에 필요한 정보를 모두 담는다.
- one query로 모두 해결이 되게 collection model 설계가 필요
- Join 불가
tags는 배열, comment는 배열 안에 도큐먼트를 값으로 가지고 있는 것을 볼 수 있다.
MongoDB
- 장점
- 빅데이터 처리 특화
- Memory Mapped를 사용
- 데이터 쓰기 시에 OS의 가상 메모리에 데이터를 넣은 후 비동기로 디스크에 기록
- Memory Mapped를 사용
- Schema-less 구조
- 다양한 형태의 데이터 저장 가능
- 데이터 모델 변경, 필드 확장 용이
- Read/Write 성능 뛰어남
- Scale Out 구조
- 많은 데이터 저장 가능
- 장비 확장이 간단
- JSON 구조로 데이터를 직관적으로 이해 가능
- 사용 방법이 쉽고, 개발이 편리
- 빅데이터 처리 특화
- 단점
- 불안정성
- 데이터의 양이 많을 경우
- 일부 데이터가 손실 가능성 존재
- 샤딩의 비정상적인 동작 가능성
- 레플리카 프로세스의 비정상 동작 가능성
- 데이터의 양이 많을 경우
- 데이터 업데이트 중 장애 발생 시, 데이터 손실 가능
- 많은 인덱스 사용 시, 충분한 메모리 확보가 필요
- RDBMS에 비해 데이터 공간 소모가 많다.
- RDBMS에 비해 transactions 지원이 미약
- OS의 메모리를 활용해서 메모리가 차면 하드디스크로 데이터를 처리하여 속도가 급격히 느려짐
- 불안정성
MongoDB VS MySQL
MongoDB |
CRUD가 MySQL보다 빠르다. |
Single Node와 Multi Node 간에 성능 차이는 거의 없다. |
Multi Node의 Insert 연산 중에 연산 실패가 일어나는 경우 발생 |
분산을 목적으로 한 DBMS로 유리함 |
JSON(JavaScript Object Notation)
- lightweight data 교환 형식
- 사람이 읽고 쓰기 쉽고, 기계가 파싱하고 생성하기 쉽다.
- 클라이언트에서 처리 퍼포먼스가 높다.
- 송수신 데이터로 XML을 사용하는 것보다 JSON이 훨씬 빠르고 간편하다.
- 표기
- 중괄호 {}로 시작하고 끝난다.
- 문자열과 값은 콜론 :으로 구분
- 각 멤버들은 콤마 ,로 구분
- object, string, number, array, true, false, null을 값으로 사용 가능
- 문자의 경우엔 따옴표 ""를 사용
- 배열은 대괄호 []로 시작하고 끝나고 각 값은 콤마 ,로 구분
MongoDB Query 예시
db.person.save({'name':'john'}); | 생성 |
db.person.find(); | 읽기 |
db.users.update({name:'Johnny'}, {name:'Cash', languages:['english']}); | 수정 |
db.users.remove({name:'Sue'}); | 삭제 |
MongoDB 인덱스
- 다수 인덱스 설정 가능
- 복합 인덱스 지원
- 빠른 검색 지원
- 도큐먼트에 저장된 데이터와 중복 저장 문제
- 메모리가 부족한 system에서는 검색 속도 저하
MongoDB 복제
- Master-Slave 구조 구성
- 데이터 복사본을 Slave에 배치
- Master 장애에 따른 데이터 손실 없이 Slave 데이터 사용 가능
- Master 장애가 발생했을 때, Slave에서 Master를 선출가능(중단 없는 서비스 가능)
- 데이터 손실을 최소화하기 위해 저널링 지원
- MongoDB의 데이터 변화에 따른 모든 연산에 대한 로그 적재
MogoDB 샤딩
- 대용량의 데이터를 저장하는 방법
- 소프트웨어적으로 데이터베이스를 분산시켜 처리
- 샤딩 방식
- 데이터베이스가 저장하고 있는 테이블을 테이블 단위로 분리
- 데이터베이스가 저장하고 있는 테이블 자체를 분할
- 분산 데이터베이스의 전통적인 분할 3계층 구조 지원
- 응용 계층, 중개자 계층, 데이터 계층
- 응용 계층
- 데이터에 접근하기 위해 중개자를 통해 모든 데이터의 입출력을 처리
- 추상화된 한 개의 데이터베이스가 존재하는 것처럼 운용
MongoDB 맵리듀스
- 대용량의 데이터를 안전하고 빠르게 처리
- 데이터를 분산하여 연산하고 다시 합친다.
- 맵과 리듀스의 단계로 나누어 처리, 사용자가 임의 코딩 가능
- 입/출력 데이터는 Key-Value 형태로 구성
- 한대 이상의 하드웨어를 활용하는 분산 프로그래밍 모델
- 분산을 통해 분할된 조각으로 처리한 다음, 다시 모아서 훨씬 짧은 시간에 계산 완료
- 대용량 파일에 대한 로그 분석, 색인 구축 검색 등에 활용
- 일괄 처리 방식으로 전체 데이터 셋을 분석할 필요가 있는 문제에 적합
참고 👇
https://www.youtube.com/watch?v=81JnYGT2HVQ
반응형
'DB > MongoDB' 카테고리의 다른 글
[Ubuntu] MongoDB 설치 (0) | 2024.04.22 |
---|---|
MongoDB repository (0) | 2023.02.23 |
Mongosh 사용 (0) | 2023.01.29 |
MongoDB 설치 (0) | 2023.01.13 |