2020. 12. 12. 00:57ㆍDatabase/MongoDB
1. SQL
SQL은 관계형 데이터베이스 관리 시스템의 데이터를 관리학 위해 설계된 특수 목적의 프로그램이 언어이다. 많은 수의 데이터베이스 관련 프로그램들이 SQL을 표준으로 채택하고 있다. 대표적으로 Oracle, MySQL 등이 있다.
2. NoSQL
NoSQL은 전통적인 관계형 데이터베이스보다 덜 제한적인 일관성 모델을 이용하는 데이터의 저장 및 검색을 위한 매커니즘을 제공한다. NoSQL은 빅데이터와 실시간 웹 애플리케이션의 상업적 이용에 널리 쓰인다.
NoSQL 종류 | 데이터 형식 | 설명 |
Apache Cassandra | Column Database | 테이블에서 열 별로 데이터를 읽고 쓸 때 유용하며, 일반적으로 분석할 때 주로 사용한다. |
Redis | Key-Value Stores | 데이터가 단순하고 양이 방대할 때 주로 사용하거나 혹은 캐시 용도로 사용한다. |
Neo4j | Graph Database | Node와 Edge로 이루어진 데이터베이스로, SNS와 같이 모든 데이터가 연결되어 있는 시스템에서 사용한다. |
MongoDB | Document Database | 유저가 각자의 프로필 데이터를 편집해서 저장하고 싶을 때 사용한다. |
3. SQL, NoSQL의 차이
성능과 확장성 면에서는 NoSQL이 SQL이 우수하다고 한다. 또한 유연하고 복잡성이 낮은 장점을 가지고 있다. 하지만 ACID(원자성, 일관성, 고립성, 영구성) 트랜잭션을 보장받기 위해서는 RDBMS를 사용하는 것이 좋다.
SQL | MongoDB |
database | database |
table | collection |
row | Document or BSON Document |
column | field |
index | index |
primary key | primary key |
aggregation (group by) | aggregation pipeline |
SELECT INTO NEW_TABLE | $out |
MERGE INTO TABLE | $merge (MongoDB 4.2 부터 가능) |
UNION ALL | $unionWith (MongoDB 4.4 부터 가능) |
transactions | transactions |
서버 | MongoDB | MySQL | Oracle | Informix | DB2 |
Database Server | mongod | mysqld | oracle | IDS | DB2 Server |
Database Client | mongo | mysql | sqlplus | DB-Access | DB2 Client |
4. MongoDB
1) Document
MongoDB는 오픈 소스 문서지향적 데이터베이스이다. Document는 RDBMS에서의 Row와 동일한 개념이다. JSON 형태의 키-값으로 이루어진 데이터 구조를 하나의 Document라고 볼 수 있다.
각 Document는 "_id"를 가지는데, 이는 PK의 개념과 동일하다. RDBMS처럼 스키마로 정해진 것이 없기 때문에 항목을 더 추가해도 문제없이 동작한다.
{
"_id": "5f2ad6b54866e5109dd2367b"
"username": "홍길동",
"hashedPassword": "비밀번호",
}
2) Collection
Collection은 Document의 그룹이다. RDBMS로 생각한다면 Table과 동일한 개념이다.
3) Database
Database는 Collection들의 물리적인 컨테이너이다. 가장 상위 개념으로 RDBMS의 Database에 해당한다.
4) Sub Document
RDBMS에서는 Join이라는 개념이 있지만, MongoDB는 Sub Document라는 개념이 있다. Sub Document는 쉽게 Document 내부에 또다른 Document가 존재한다고 생각하면 된다. 하나의 Document에 많은 데이터를 포함하면서 여러 개의 Sub Document를 가짐으로서 확정성을 우수하게 해준다. 이러한 구조는 데이터를 분할하는 기술인 Sharding 클러스터 구축에 유리하다.
대표적인 예시로, 하나의 게시글에는 여러 개의 댓글이 달려있다. 이러한 일대다 관계에서, RDBMS는 두 개의 테이블로 분리시키지만, MongoDB에서는 아래와 같은 형태로 해결한다.
{
_id: POST_ID,
title: POST_TITLE,
content: POST_CONTENT,
username: POST_WRITER,
tags: [ TAG1, TAG2, TAG3 ],
comments: [
{
username: COMMENT_WRITER,
mesage: COMMENT_MESSAGE,
time: COMMENT_TIME
},
]
}
'Database > MongoDB' 카테고리의 다른 글
[MongoDB] Text Search (0) | 2020.12.17 |
---|---|
[MongoDB] Bulk Write, Retryable Write/Read (0) | 2020.12.16 |
[MongoDB] CRUD (0) | 2020.12.15 |
[MongoDB] MongoDB 설치 (0) | 2020.12.12 |