MongoDB

katsukichi·2021년 4월 13일
0

CodeStates_IM

목록 보기
41/48

before

지난번 RDBMS에 대해서 배웟고

ORM을 이용한 node환경에서 얼마나 편하게 다룰수있는지 사용및 공부해봣다,

이번엔 NoSQL을 사용,공부 해보면서 CRUD를 구현해보자.

나는 관계형 데이터가 NOSQL보다 더 좋은 Db라고 생각했지만

그렇지않다. 서비스에따라서 데이터베이스를 선택한다.

rdbms는 비교적 데이터가 안정적이고, 트랜잭션을쓰기에 알맞다.

nosql은 빠른데신 rdbms에비해서 안정성이 좋지않다.

안정성이라고하기 보단 데이터 무결성의 문제인거같다.


MongoDB 데이터베이스

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

NoSQL은 언제 많이 쓰나요 ?

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

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

  3. 빠르게 서비스를 구축하고 데이터 구조를 자주 업데이트 하는 경우

Atlas Cloud

MongoDB에서는 아틀라스를 사용한다.

클라우드에서 데이터베이스를 설정한다.

GUI및 Shell로 데이터를 시각화,분석,내보내기 및 빌드 하는데 사용할수 있다.
아틀라스 사용자는 클러스터를 배포할수있다. 이는 그룹화된 서버에 데이터를 저장한다.

클러스터 ?

인스턴스들의 모임을 클러스터라고 한다.

하나의 시스템처럼 작동한다.

단일 클러스터에서 각각의 인스턴스는 동일한 복제본을 가지고 있으며 이 모음을 레플리카 세트라고 한다.

클러스터를 이용하여 배포할 경우, 이는 자동으로 레플리카 세트를 생한다.

이러한 서버는 레플리카 세트로 구성되어 있고, 이는 동일한 데이터를 저장하는 몇 개의 연결된 MongoDB인스턴스의 모음이다. 여기서 인스턴스는 특정 소프트웨어를 실행하는 로컬 또는 클라우드의 단일 머신이고, 이 경우 인스턴스는 클라우드에서 실행되는 MongoDB데이터 베이스이다.

도큐먼트나 컬렉션을 변경할 경우, 해당 데이터의 중복사본이 레플리카 세트에 저장된다.

이 설정을 통해 레플리카 세트의 인스턴스 중 하나에 문제가 발생하더라도 데이터는 그대로 유지되며 레플리카 세트의 애플리케이션에서 나머지 작업을 할 수 있다.

이 과정을 위해 클러스터(서버 그룹)를 배포하면 자동으로 레플리카 세트가 구성된다.

용어정리

  • 레플리카 세트
    동일한 데이터를 저장하는 소수의 연결된 머신들은 머신 중 하나에 문제가 발생하더라도 데이터가 그대로 유지도디ㅗ록 한다.
  • 인스턴스
    로컬 또는 클라우드에서 특정 소프트웨어를 실행하는 단일 머신, MongoDB에서는 데이터베이스이다.
  • 클러스터
    데이터를 저장하는 서버 그룹

아틀라스 클러스터 생성

지금보니까 mongodb설치하는 부분같은데

아무리생각해도 내가 다루던 그 mongodb가 맞나 싶다..

계정생성-> 약간 하나의 팀(organization) 생성
-> 프로젝트생성 -> 사용자 생성-> 권한부여 -> PC연결 -> PATH 지정(맥이 이래서편해..알아서다해줘..) -> 연결

마치 mysql처럼 shell환경이 조성되는데

연결된것은 다른 PC의 DBㅇ이다.

예전에 배울땐 이런느낌아니였는데 ..ㅇㅁㅇ ..

MongoDB Document

몽고디비에서 도큐먼트가 무엇일까?

도큐먼트는 객체와 같이 데이터를

필드-값 쌍(Field - Value pair)으로 저장하고 구성하는방법이다.

도큐먼트에서 필드는 데이터의 고유한 식별자 이고 값은 주어진 식별자와 관련된 데이터를 뜻합니다.

도큐먼트의 모음을 컬렉션이라고 부른다.

데이터베이스는 여러개의 컬렉션으로 구성된다.

  • 도큐먼트(Document)

    필드 - 값 쌍으로 저장된 데이터

  • 필드(Field)

    데이터포인트를 위한 고유한 식별자

  • 값(Value)

    주어진 식별자와 관계된 데이터

  • 컬렉션(Collection)

    MongoDB의 도큐먼트로 구성된 저장소로 일반적으로 도큐먼트 간의 공통 필드가 있다.. 데이터베이스 당 많은 컬렉션이 있고 컬렉션 당 많은 도큐먼트가 있을수 있다.


JSON vs BSON

JSON은 중괄호{},콤마로 구분되는 데이터 자료이다.

오브젝트랑 많이닮아있고 파이썬의 딕셔너리 자료형이랑도 비슷하다.

필드도 문자열이므로 ""쌍따옴표로 감싸야한다.

하지만 개발자가 쓰기좋은 형태이지만

파싱이 매우느리고, 메모리사용에있어서 비효율적이다.

JSON은 기본 데이터타입만 지원하기때문에 사용할 수 있는 타입에 제한도 있다.

이러한 해결때문에 BSON(Binary JSON)형식을 도입했다.

컴퓨터언어에 가까운 이진법을 기반으로 둔 표현이라서

메모리사용에 효율적이고, 빠르고 , 가볍고 유연하다.

하지만 사람이 읽지는못하겟지 ㅠㅠ

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


Importing & Exporting

몽고디비에서 다른 로컬장치나 다른시스템으로 내보내거나, 가져오는것에 대해서 알아보자.

몽고디비는 기본적으로 BSON 형식으로 저장되어있다.

  1. 로컬머신으로 내보내기(exporting) - JSON 타입

  2. 다른시스템으로 내보내기(exporting) - BSON 타입

  3. 클라우드 데이터를 로컬머신으로 백업하기(exporing) - BSON 타입

그러면 언제 JSON이고 , 언제 BSON 인데 ..?

내보내기(exporting)

  • mongoexport
    • mongoexport --uri "<Atlas Cluster URI>"
      • URI형태: "mongodb+srv://<your username>:<your password>@<your cluster>mongodb.net/database_name"
      • --uri,--colection,--out 옵션을 써야한다.
      • 일반적으로 URI를 보내야한다. URI는 일반웹 URI와 형식이 비슷하고 , username,password,cluster주소 로 이루어져있다.
      • JSON 형식으로 데이터를 내보낼때에는 내보낼 컬렉션과 파일의 이름을 정확히 명시해줘야한다.
  • mongodump
    • mongodump --uri "<Atlas Cluster URI>"
      • 별다른 쿼리가 없다.

가져오기(importing)

  • mongoimport
    • mongoimport --uri "<Atlas Cluster URI>"
    • --uri,--drop
    • --drop=<filename>.json : (optional)
    • --collection <collectionname> : (optional)
  • mongorestore
    • mongorestore --uri "<Atlas Cluster URI>"
    • --uri,--drop
    • --drop dump : (optional)

--drop 옵션은 기존에 있는 데이터를 삭제하기위한 옵션이고 선택적으로 사용 할 수있다.

profile
front-back / end developer / Let's be an adaptable person

0개의 댓글