본문 바로가기
SEMINAR/몽고DB

MONGODB-소개, 데이터모델

by 스꼬맹이브로 2020. 4. 22.
728x90
반응형
SMALL

1. 소개

  •  mongoDB는 C++로 작성된 오픈소스 문서지향(Document-Oriented)적 Cross-platform 데이터베이스
  • 뛰어난 확장성과 성능을 자랑. 또한 현존하는 NoSQL 데이터베이스 중 인지도 1위를 유지

※NoSQL이란? 

  • Not Only SQL, 기존의 RDBMS의 한계를 극복하기 위해 만들어진 새로운 형태의 데이터저장소
  • 관계형 DB가 아니므로 RDBMS처럼 고정된 스키마 및 JOIN이 존재하지 않음

2. Document Oriented 데이터베이스

  • Document는 문서라는 의미이나, 단지 번역된 단어로서의 '문서'는 아니다.
    (통상적으로 사용하는 '한글', '워드' 등의 문서와는 다른 의미)
  • RDBMS의 record와 비슷한 개념으로 데이터 구조는 한 개 이상의 key-value pair 으로 구성됨.
  • _id는 12byte의 16진수 값으로 각 document의 유일함(uniqueness)을 제공
  • 첫 4byte는 timestamp, 3byte는 machine id, 다음 2byte는 MongoDB의 서버 프로세스ID, 마지막, 3byte는 순차번호를 뜻함.

 

3. Collection

  • Collection은 MongoDB Document의 그룹
  • Document들이 Collection내부에 위치하고 있음
  • RDBMS의 table과 비슷한 개념이지만 RDBMS와 달리 schema를 따로 가지고 있지 않음
  • 그 이유는 각 Document들이 동적인 schema를 갖기 때문
  • Database는 Collection들의 물리적인 컨테이너로 각 Database에는 파일시스템에 여러 파일로 저장됨.

 

4.MongoDB 장점

  • Schema-less(Schema가 없다. 같은 Collection 안에 있을지라도 다른 Schema를 가지고 있을 수 있다.)
  • 각 객체의 구조가 뚜렷하다.
  • 복합한 Join이 없다. (DBMS의 역할)
  • Deep Auery ability (문서지향적 Auery Language를 사용하여 SQL만큼 강력한 Query 성능을 제공한다.)
  • 어플리케이션에서 사용되는 객체를 데이터베이스에 추가할 때 Conversion/ Mapping이 불필요하다.
    (number, boolean, string 등 뿐만 아니라 object, 자바스크립트 등도 저장이 가능하기 때문에 바꾸지 않아도 된다.)

 

5. Data Modelling

1) schema디자인 할 때 고려사항

  • 사용자 요구(User Requirement)에 다라 schema를 디자인
  • 객체들을 함께 사용하게 된다면 한 Document에 합쳐서 사용 (ex : 게시물 - 덧글 과의 관계)
  • 그렇지 않으면 따로 사용 ( 그리고 join을 사용하지 않는 것을 확실히 해둔다.)
  • 읽을 때 join 하는 게 아니라 데이터를 작성 할 때 join

2) MongoDB의 Join

  • Embedded Document로 하여 컬렉션 안에 하나의 필드에 조인이 될만한 로우를 입력하는 방식을 사용
  • lookup 이라는 함수를 사용하여 join과 동일한 효과로 컬렉션을 합칠 수가 있음

3)예제

  • 게시글에는 작성자 이름, 제목, 내용이 담겨져 있음
  • 각 게시글은 0개 이상의 태그를 가지고 있을 수 있음
  • 게시글엔 덧글을 달 수 있고, 덧글은 작성자 이름, 내용, 작성시간을 담고 있음

- RDBMS 스키마로 만들었을 때

RDBMS

- NoSQLDB, MongoDB로 만들었을 때

[ ] <- 대괄호 안에 계속 추가해주면 됨!

 

- 비교

728x90
반응형
LIST