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 스키마로 만들었을 때
- NoSQLDB, MongoDB로 만들었을 때
[ ] <- 대괄호 안에 계속 추가해주면 됨!
- 비교
728x90
반응형
LIST
'SEMINAR > 몽고DB' 카테고리의 다른 글
MongoDB Error: couldn't connect to server 127.0.0.1:27017 오류해결 (0) | 2022.12.07 |
---|---|
MONGODB - update() (0) | 2020.05.07 |
MongoDB - sort(), limit(), skip() (0) | 2020.05.04 |
MONGODB - Document조회 (0) | 2020.04.26 |
MONGODB-Database/Collection/Document 생성·제거와 Insert() (0) | 2020.04.23 |