728x90
반응형
NoSQL?
Not Only SQL : 기존의 RDBMS의 한계를 극복하기 위해 만들어진 새로운 형태의 데이터저장소
관계형 DB가 아니므로, RDMS처럼 고정된 스키마 및 JOIN이 존재하지 않는다.
Document?
- Document Oriented 데이터베이스
== RDMS의 record
데이터 구조 : 한개이상의 field-value pair (JSON)
{
"_id": ObjectId("5099803df3f4948bd2f98391"),
"username": "velopert",
"name": { first: "M.J.", last: "Kim" }
}
- 여기서 _id, username, name 은 field고 그 오른쪽에 있는 값들은 value 입니다.
- _id 는 12bytes의 hexadecimal 값으로서, 각 document의 유일함(uniqueness)을 제공합니다.
- 이 값의 첫 4bytes 는현재 timestamp, 다음 3bytes는 machine id, 다음 2bytes는 MongoDB 서버의 프로세스id, 마지막 3bytes는 순차번호입니다 추가될때마다 값이 증가
- Document는 동적(dynamic)의 schema 보유.
- 같은 Collection 안에 있는 Document 끼리 다른 schema 를 갖고 있을 수 있다. 서로 다른 데이터 (즉 다른 field) 들을 가지고 있을 수 있다.
Collection
- MongoDB Document의 그룹
- Document들이 Collection내부에 위치.
- RDMS의 table과 비슷한 개념, RDMS와 달리 schema를 따로 가지고 있진않다.
Database?
- Collection들의 물리적인 컨테이너
- 각 Database는 파일시스템에 여러파일들로 저장.
RDMS와의 비교
💡 Relational Database Management System (관계형 데이터베이스 관리 시스템)은 행과 열로 된 2차원의 table로 데이터를 관리하는 데이터베이스 시스템 ex) Mysql, Oracle Database, DB2 등
RDBMS | MongoDB |
Database | Database |
Table | Collection |
Tuple / Row | Document |
Column | Key / Field |
Table Join | Embedded Documents |
Primary Key | Primary Key (_id) |
Database Server & Client | |
mysqld | mongod |
mysql | mongo |
Data Modelling
schema 디자인 할 때 고려사항
- 사용자 요구 (User Requirement) 에 따라 schema를 디자인한다.
- 객체들을 함께사용하게 된다면 한 Document에 합쳐서 사용한다. (예: 게시물-덧글 과의 관계)그렇지 않으면 따로 사용한다 (그리고 join 을 사용하지 않는걸 확실히 해둔다)
- 읽을때 join 하는게아니라 데이터를 작성 할 때 join 한다.
예제
간단한 블로그를 위한 데이터베이스를 디자인한다고 가정해봅시다. 요구사항을 나열해볼까요?
- 게시글에는 작성자 이름, 제목, 내용이 담겨져있다.
- 각 게시글은 0개 이상의 태그를 가지고 있을 수 있다.
- 게시글엔 덧글을 달 수 있다. 덧글은 작성자 이름, 내용, 작성시간을 담고있다.
{
_id: POST_ID,
title: POST_TITLE,
content: POST_CONTENT,
username: POST_WRITER,
tags: [ TAG1, TAG2, TAG3 ],
time: POST_TIME
comments: [
{
username: COMMENT_WRITER,
mesage: COMMENT_MESSAGE,
time: COMMENT_TIME
},
{
username: COMMENT_WRITER,
mesage: COMMENT_MESSAGE,
time: COMMENT_TIME
}
]
}
반응형
'데이터베이스 > MongoDB' 카테고리의 다른 글
JSON & BSON (0) | 2024.04.01 |
---|---|
보안 설정 & 커넥션 생성 (0) | 2024.04.01 |
조회(find), query연산자 (0) | 2024.04.01 |
생성, 제거, 업데이트 (0) | 2024.04.01 |
설치 (0) | 2024.04.01 |