[MongoDB] SQL, NoSQL, MongoDB

2020. 12. 12. 00:57Database/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
     },
   ]
}

[참고] www.guru99.com/mongodb-tutorials.html

[참고] docs.mongodb.com/manual/mongo/

728x90

'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