본문 바로가기
DB/MongoDB

데이터 베이스(NoSQL) - Mongo DB

by nomfang 2021. 1. 22.
728x90
반응형

NoSQL이란?

NoSQL은 Not Only SQL 혹은 Not SQL이다

NoSQL 은 딱 한 가지 종류의 DB만을 뜻하지 않는다

SQL DB들은 MySQL, SQLite, PostgreSQL 등 DB마다 조금씩 다르지만, 결국에는 SQL이다

반대로 NoSQL은 DB마다 서로 각기 다른 종류가 존재한다

 

NoSQL은 크게 3가지

1. Document DB (MongoDB)
Document형태로 데이터가 저장

Document는 JSON, XML등을 칭하며 Column Oriented와 같이 스키마가 유동적

 

2. Key-Value DB (DynamoDB, Redis)
Key와 Value로 이루어진 간단한 데이터 구조

기본적인 형태로 value에 String, Integer, List, Hash 등의 가본 자료형

속도는 빠르고, 분산저장 환경에 용이하여 key에 대한 엑세스 속도는 빠르지만 검색에는 취약하다

 

3. Graph DB (Neo4j)
데이터를 노드 간의 관계로 표현한 DB

MongoDB의 특징

  • 고정된 테이블 스키마를 갖지 않는다
    RDB와 다르게 테이블의 스키마가 유동적 데이터를 저장하는 column은 각기 다른 이름과 다른 데이터 타입을 갖는 것이 허용된다
  • 문서지향(Document-Oriented) 데이터베이스
    MongoDB는 유연하며 확장성이 높은 문서 지향의 데이터베이 스키마의 제약이 없고 BSON(Binary JSON)형태로 각 문서가 저장된다 또한, 기존 RDB에서 지원하지 않았던 형태로도 저장이 가능. RDB에서 사용했던 JOIN 기능이 필요 없이 이해하기 쉬운 형태로 데이터를 저장할 수 있다

💡 NoSQL이 SQL보다 좋고 나쁘고가 아니라 용도에 따라 선택

MongoDB란?

MongoDB는 오픈소스 문서지향(Document Oriented) 크로스 플랫폼 데이터베이스

MongoDB는 유연하고 JSON과 유사한 문서로 데이터를 저장

따라서, 필드는 문서마다 다를 수 있으며 시간에 따라 데이터 구조를 변경할 수 있다

컬렉션을 사용해 데이터를 하나로 그룹화한다 컬렉션(Collection)이란 용도가 같거나 유사한 문서들을 그룹으로 묶는 것 이러한 컬렉션은 기존의 SQL DB의 테이블처럼 동작한다

문서(Document)는 MongoDB내에 있는 하나의 실제데이터를 나타내는 표현

MongoDB의 구조

  • Database, Collection, Document 3단 구조

출처:엘리스코딩

1. 도큐먼트(Document)
도큐먼트는 RDB에서의 Row(튜플)과 동일한 개념

 JSON 형태의 Key-Value로 이루어진 데이터 구조를 하나의 도큐먼트로 생각하면 된다

각 도큐먼트는 유일한 id를 가지고 있다 (Primary Key와 동일한 개념)

RDB처럼 스키마로 정해진 것이 없어, 아래 코드에서 id, name, age를 적고 phoneNum이나 email을 추가하여 도큐먼트를 생성해도 문제없이 동작한다

{ "id": "aslkf87sdljk", "name": "Elice", "age": 12 }

2. 컬렉션(Collection)
컬렉션은 도큐먼트의 그룹 개념

RDB로 생각한다면 테이블과 같은 개념 - 스키마를 가지고 있지 않는다는 특징

3. 데이터베이스(Database)
데이터베이스는 컬렉션들의 물리적인 컨테이너이자 가장 상위 개념 - RDB의 Database와 동일한 개념

도큐먼트는 JSON과 비슷한 BSON 구조

BSON은 Binary JSON 
JSON의 일부로 MongoDB에서 데이터를 저장하기 위한 형식
BSON은 Field와 Value를 가지고 있으며 Key값과 Value값을 가진 Java의 HashMap과 유사하다

{ name: "Elice", age: 12, status: "InProgress" groups: ["Python", "Javascript"] }

RDBMongoDB

데이터베이스(Database) 데이터베이스(Database)
테이블(Table) 컬렉션(Collection)
튜플(Row) 도큐먼트(Document)
반응형

댓글