NoSQL/ MongoDB

🐶·2021년 8월 1일
0

개념 정리

목록 보기
34/41
post-custom-banner

1. RDBMS와 NoSQL

1. RDBMS란?

RDBMS : Relational Database Management System
데이터를 테이블에 나누어 담고 테이블 간 관계를 정의하여 사용하는(이 부분에서 불필요한 테이블 생성과 관계 정의 과정이 발생) 형식의 데이터 베이스
SQL Database 특징: Strict Schema, Relations

2. NoSQL란?

noSQL : Not Only / Non-Relational SQL
관계형 데이터베이스 SQL와 달리 noSQL은 데이터를 테이블에 쪼개 담지 않고 도큐먼트 안에 JSON 형식으로 다루어 수평적인 데이터 구조를 지향한다. 관계형 데이터베이스에서는 수평 확장이 어렵다는 단점을 극복할 수 있는 데이터베이스이기도 하여서 '더 유연한' 구조를 가지고 있다고 본다. 대용량 데이터를 다루는 문서, 키-밸류, 그래프, 인-메모리, 검색 등에 용이하다.

3. NoSQL의 특징

flexibility(유연성): noSQL은 빠르고 반복적인 개발을 요구하는 환경에서 유연한 스키마를 제공한다.
scalability(확장성): noSQL은 서버를 증축하는 대신 하드웨어의 분산형 클러스터(여러 개의 데이터베이스에 데이터를 분할 할 수 있음)를 통해 확장할 수 있도록 설계되어서 확장성이 높다.
high-performance(높은 성능): noSQL은 문서, 키-밸류, 그래프 형식을 갖춘 데이터 모델에 최적화되어 있어 관계형 데이터베이스보다 더 높은 성능을 보장한다.
highly functional(높은 기능성): noSQL은 데이터모델에 맞춘 api를 제공한다.

4. NoSQL 기반의 비관계형 데이터베이스를 사용하는 케이스

  • 데이터의 구조가 거의 또는 전혀 없는 대용량의 데이터를 저장하는 경우

대부분의 NoSQL 데이터베이스는 저장할 수 있는 데이터의 유형에 제한이 없다. 필요에 따라, 언제든지 데이터의 새 유형을 추가할 수 있다. 소프트웨어 개발에 정형화 되지 않은 많은 양의 데이터가 필요한 경우, NoSQL을 적용하는 것이 더 효율적일 수 있다.

  • 클라우드 컴퓨팅 및 저장공간을 최대한 활용하는 경우

클라우드 기반으로 데이터베이스 저장소를 구축하면, 저렴한 비용의 솔루션을 제공받을 수 있다. 소프트웨어에 데이터베이스의 확장성이 중요하다면, 별다른 번거로움 없이 확장할 수 있는 NoSQL 데이터베이스를 사용하는 것이 좋다.

  • 빠르게 서비스를 구축하는 과정에서 데이터 구조를 자주 업데이트 하는 경우

NoSQL 데이터베이스의 경우 스키마를 미리 준비할 필요가 없기 때문에 빠르게 개발하는 과정에 매우 유리하다. 시장에 빠르게 프로토타입을 출시해야 하는 경우가 이에 해당한다. 또한 소프트웨어 버전별로 많은 다운타임(데이터베이스 서버를 오프라인으로 전환하여 데이터 처리를 진행하는 작업 시간) 없이 데이터 구조를 자주 업데이트 해야하는 경우, 스키마를 매번 수정해야 하는 관계형 데이터베이스 보다 NoSQL 기반의 비관계형 데이터베이스를 사용하는 게 더 적합하다.

2. MongoDB

1. What is MongoDB?

문서 지향적(document-oriented) noSQL 데이터베이스로 엔진은 C++로 작성된 오픈 소스이다.

2. MongoDB 기본 개념

  • Document: 관계형 데이터베이스에서 다루는 Record라는 개념과 유사하고, JSON 형식으로 key-value 쌍을 다루는 데이터 구조로 구성되었다. document에서는 _id라는 고유 값이 생성된다. _id의 구성은 시간/머신ID/프로세스ID/순차번호로 구성된다.
  • Collection: 관계형 데이터베이스에서 다루는 Table이라는 개념과 유사하고, document의 집합이다.
  • Database: Collection들의 컨테이너이다.

JSON & BSON


shell을 이용하여 도큐먼트를 조회하거나 업데이트 할 때, 도큐먼트는 JSON(JavaScript Object Notation) 형식으로 출력된다. 그러나 JSON의 형태로 데이터를 저장할 때 단점도 존재한다. JSON은 텍스트 형식이기 때문에 읽기 쉽지만, 파싱이 느리고 메모리 사용이 비효율적이다. 그리고 JSON은 기본 데이터 타입만을 지원하기 때문에, 사용 할 수 있는 데이터 타입에 제약이 있다.

이런 문제점을 해결하기 위한 방안으로 BSON(Binary JSON) 형식을 도입하였습니다. 따라서 JSON 보다 메모리 사용이 효율적이며 빠르고, 가볍고, 유연하다. 뿐만 아니라, BSON의 사용으로 더 많은 데이터 타입을 사용할 수 있다.

MongoDB는 JSON형식으로 작성된 것은 무엇이든 데이터베이스에 추가할 수 있고, 쉽게 조회할 수 있다. 그러나 그 내부에서는 속도, 효율성, 유연성의 장점이 있는 BSON으로 데이터를 저장, 사용하고 있다.

3. MongoDB 특징

  • schema-less: 관계형 데이터베이스는 테이블 내에 레코드가 일정한 스키마를 유지해야 한 것과 달리, mongoDB에서는 콜렉션 내 도큐먼트 레벨이 다양한 스키마를 가질 수 있어서 도큐먼트가 각자 고유한 필드를 가질 수 있다.
  • join-less: 관계형 데이터베이스가 join 등을 통해 관계를 정의하는 것과 달리, mongoDB에서는 join 과정 없이 한 도큐먼트 안에 최대한 많은 데이터를 포함시키기 때문에 querying이 더 빠르다.
    -- 확장성이 높고, mongos 서버 내에 sharding(여러 개 데이터 베이스로 데이터를 분할시켜 할당) 클러스터 구축이 가능하다.

4. MongoDB 기본 Querying(CRUD)

  • insert: db.콜렉션명.insert({필드1: "값1", 필드2: "값2", ...})
  • select: db.콜렉션명.find({필드1: "값1", ...})
  • update: db.콜렉션명.update({조건 필드: "값"}, {$set: {변경 필드: "변경 값"})
  • delete: db.콜렉션명.remove({삭제할 필드: "값"})
profile
우당탕탕 개발일기📝🤖
post-custom-banner

0개의 댓글