본문 바로가기

개발인생다반사/TIL(Today i learned)

TIL - 211119 [데이터베이스] NoSQL

몽고DB NoSQL 도큐먼트 데이터베이스. 데이터를 문서처럼 저장하는 데이터베이스.

JSON 유사형식으로 데이터를 문서화.

도큐먼트는 데이터를 필드-값 형태로 가지고 있고 컬렉션이라고 하는 그룹으로 묶어서 관리

Achievement Goals

  • NoSQL의 장점 및 특징에 대해서 이해할 수 있다.
  • MongoDB의 도큐먼트(Document)와 컬렉션(Collection)에 대해 이해할 수 있다.
    • JSON과 BSON의 차이점을 이해하고, 도큐먼트를 가져오거나 내보낼 수 있다.
  • MongoDB의 Atlas에 대해 이해할 수 있다
    • 클러스터(Cluster)와 레플리카 세트(Replica set)에 대해 이해할 수 있다.
    • Atlas를 GUI(Graphical User Interface)와 shell 쿼리문으로 사용할 수 있다.
  • MongoDB에서 CRUD를 할 수 있다.
    • Insert(C), Find(R), Update(U), Delete(D)에 대한 쿼리문을 작성할 수 있다.
    • 연산자와 프로젝션(Projection)을 사용할 수 있다.
    • 배열과 서브 도큐먼트를 쿼리할 수 있다.
  • Aggregation Framework를 사용하여 aggregate 명령어로 쿼리할 수 있다.
    • $match, $project, $group 연산자를 사용할 수 있다.

Capter 1

1. NoSQL Database?

NoSQL은 관계형 테이블의 레거시한 방법을 사용하지 않는 데이터베이스

MongoDB는 NoSQL 도큐먼트 데이터베이스

 

2. Atlas Cloud

MongoDB는 아틀라스 클라우드에 데이터베이스를 설정

GUI, CLI 데이터 시각화, 분석, 내보기, 빌드

클러스터를 배포할 수 있음.

 

인스턴스: 특정 소프트웨어를 실행하는 로컬 또는 클라우드 단일 머신.

레플리카 세트 : 동일한 데이터를 저장하는 몇 개의 연결된 Mongo DB 인스턴스 모음

인스턴스 중 하나에 문제가 발생하더라도 데이터는 그대로 유지

나머지 레플리카 세트의 인스턴스에 저장된 데이터로 작업 가능

용어 정리

  • 레플리카 세트
    동일한 데이터를 저장하는 소수의 연결된 머신을 뜻합니다. 레플리카 세트 중 하나에 문제가 발생하더라도, 데이터를 그대로 유지할 수 있습니다.
  • 인스턴스
    로컬 또는 클라우드에서 특정 소프트웨어를 실행하는 단일 머신, MongoDB에서는 데이터베이스입니다.
  • 클러스터
    데이터를 저장하는 서버 그룹으로 여러 대의 컴퓨터를 네트워크를 통해 연결하여 하나의 단일 컴퓨터처럼 동작하도록 제작한 컴퓨터를 뜻합니다.

2. Atlas Cluster 생성하기

(중략)

 

3. MongoDB Document

  • 도큐먼트(Document)
    필드 - 값 쌍으로 저장된 데이터
  • 필드(Field)
    데이터 포인트를 위한 고유한 식별자
  • 값(Value)
    주어진 식별자와 연결된 데이터
  • 컬렉션(Collection)
    MongoDB의 도큐먼트로 구성된 저장소입니다.
    일반적으로 도큐먼트 간의 공통 필드가 있습니다.
    데이터베이스 당 많은 컬렉션이 있고, 컬렉션 당 많은 도큐먼트가 있을 수 있습니다.

4. JSON vs. BSON

shell을 이용해서 도큐먼트를 조회하거나 업데이트 할 때, 도큐먼트는 JSON 형식으로 출력

JSON은 가독성이 좋지만 텍스트 형식이기 때문에 파싱이 느리고 메모리 사용이 비효율적

기본 데이터 타입만 지원하기 때문에 사용할 수 있는 데이터 타입 제약

BSON(Binary JSON) 도입

MongoDB는 JSON형식으로 작성된 것은 무엇이든 데이터베이스에 추가할 수 있고 쉽게 조회할 수 있음

그러나 내부는 속도, 효율성, 유연성을 위해 BSON으로 데이터 저장, 사용

5. Importing & Exporting

MongoDB의 데이터는 입력: BSON

출력: JSON

import시에 옵션 collection도 있음

Capter 2- MongoDB CRUD

모든 MongoDB 도큐먼트는 _id필드를 기본값으로 반드시 가지고 있다.

_id 필드의 값은 각 도큐먼트를 구별하는 역할을 한다.

내부 필드의 값이 동일해도 _id값이 다르면 서로 다른 다큐먼트로 간주한다.

임의로 생성되고 ObjectId타입(12byte, 24char)의 값 사용

 

insert

insert를 통해 컬렉션에 도큐먼트를 추가할 수 있다.

insert 명령어를 사용하면, 주어진 도규먼트 배열의 인덱스 순서로 작업이 실행됩니다.

그러나 ordered를 추가하면,

순서에 상관 없이 고유한 _id를 가진 도큐먼트는 모두 컬렉션에 삽입됩니다.

 

 

find

2가지의 조건을 주고 싶다면 그 조건을 find(<쿼리문1, 쿼리문2>) 형태로 적어주면 된다.

db.zips.find({"state" : "NY", "city" : "ALBANY"})

db.zips.find() ==> zip컬렉션의 모든 데이터 조회

pretty() ==> 예쁘게 출력

db.zips.find().count() ==> 총 데이터 수

findOne() ==> 주어진 쿼리문에 맞는 첫 번째 도큐먼트 리턴

 

update

MGL(MongDB Query Language) 업데이트 연산자 $inc를 이용 

 

updateOne, $set을 이용하여 주어진 필드에 지정된 값을 업데이트

만일 잘못된 필드명을 입력한다면 해당 도큐먼트 안에 잘못 작성된 필드가 그대로 추가된다.

 

$push : 배열로 이루어진 필드의 값에 요소를 추가하는 연산자

DELETE

db.collection_name.drop() ==>. 컬렉션 삭제

Chapter 3 - Advanced CRUD

비교연산자

논리연산자

 

표현연산자

배열연산자

Chapter 4- Aggregation Framework