DB/MongoDB

MongoDB

잔망루피 2023. 1. 13. 22:25

쌓아놓고 삭제가 없는 경우에 적합하다.

ex) 로그 데이터, 이벤트 참여 내역, 세션

 

트랜잭션이 필요한 금융, 결제, 빌링, 회원정보등은 RDBMS를 사용해야한다.

 

도큐먼트 데이터 모델

  • 속성의 이름, 값으로 이루어진 쌍의 집합
  • 속성은 문자열/숫자/날짜
  • 배열/다른 도큐먼트를 지정할 수 있다.
  • 하나의 document에 필요한 정보를 모두 담는다.
  • one query로 모두 해결이 되게 collection model 설계가 필요
  • Join 불가

도큐먼트 형태의 구조

tags는 배열, comment는 배열 안에 도큐먼트를 값으로 가지고 있는 것을 볼 수 있다.

 

 

MongoDB

  • 장점
    • 빅데이터 처리 특화 
      • Memory Mapped를 사용
        • 데이터 쓰기 시에 OS의 가상 메모리에 데이터를 넣은 후 비동기로 디스크에 기록
    • 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