[Database] MongoDB Intro

게맛살맛게·2021년 12월 22일
0

DB

목록 보기
16/23
post-thumbnail

MongoDB

NoSQL 데이터베이스의 한 종류인 도큐먼트 데이터베이스

MongoDB의 특징

도큐먼트 DB : JSON 형식으로 데이터를 관리

  • mongoDB가 데이터를 저장하는 최소 단위
  • 필드와 값의 쌍으로 구성
  • 관계를 갖는 데이터를 중첩 도큐먼트와 배열을 사용하여 1개의 도큐먼트로 표현
  • 입출력 시 JSON ↔ 저장 시 BSON 도큐먼트로 변환 (mongoDB 자동 처리)

유연한 스키마

  • 스키마의 선언 없이 필드의 추가와 삭제자유로운 Schema-less 구조
  • 컬렉션 내 모든 도큐먼트들의 필드 집합이 동일하지 않음
  • 같은 필드라도 데이터 타입이 다를 수 있는 비정형 스키마

비관계형 DB

  • 관계(Relationship) 개념이 없는 비관계형 데이터베이스
  • 조인(Join)을 지원하지 않음
  • 임베디드 방식의 도큐먼트 구조를 사용하거나 레퍼런스 방식의 도큐먼트 구조를 사용
    애플리케이션에서 조인

MongoDB의 객체

관계형 데이터베이스와 많은 공통점을 가지고 있으며 일부 명칭은 다르나 비슷한 역할을 수행

Database

  • Database는 Collection들의 물리적인 컨테이너
  • 각 Database는 파일시스템에 여러 파일들로 저장

Collection

  • Collection은 MongoDB Document 들의 그룹
  • Document들은 Collection 내부에 위치
  • RDMS의 table과 비슷한 개념이지만 RDMS와 달리 schema가 따로 없음

Document

  • mongoDB는 Document-Oriented 데이터 저장공간
  • document들이 모여 collection을 이루고, collection들의 집합이 Database를 이룬다.
  • MongoDB에서의 Document는 RDMS의 record(row)와 비슷한 개념
  • 한 개 이상의 key-value 쌍으로서 BSON documents
  • BSON은 JSON을 binary로 표현한 것
    ➡ JSON 형으로 문서를 만들어 저장하면 자동으로 BSON으로 변경
  • Document는 동적(dynamic)의 schema
    같은 Collection 안에 있는 Document끼리 서로 다른 schema를 갖고 있을 수 있으며
    서로 다른 데이터 (즉 다른 key) 들을 가지고 있을 수 있다.


MongoDB의 DML

JavaScript 기반의 명령어와 JSON 도큐먼트를 인자로 사용

항목mongoDB - JavaScript관계형 DB - SQL
입력db.member.insert({
no : "C001",
age : 45,
status: "A" })
insert into member(no, age, status)
values('C001', 45, 'A')
수정db.member.update(
{ age : { $gt : 25 } },
{ $set : { status : "C" } },
{ multi : true } )
update member set status = 'C'
where age > 2
삭제db.member.remove(
{ no : "C001" } )
delete from member where no = 'C001'
조회db.member.find( { no : "C001" } )select * from member where no = 'C001'

MongoDB의 Schema

별도의 스키마 선언 없이 도큐먼트의 필드를 자유롭게 추가 및 삭제 하는 유연한 구조

데이터 모델

도큐먼트 구조 설계 방식 (임베디드 vs. 레퍼런스)

SQL? NoSQL?

  • 똑같은 조건으로 설계되었을 시 기존 RDBMS 보다 속도가 빠르다는 장점
    이런 속도는 ACID(트랜젝션)를 포기한 댓가로 얻은 것
    ➡ 데이터 consistency(일관성)가 거의 필요 없고 조인 연산을 embed로 대체할 수 있는 경우
    ➡ MongoDB가 확실 한 대안이 될 수 있음
    ❗ 저장되는 데이터가 은행 데이터 같이 consistency가 매우 중요한 작업에는 NoSQL 사용 ❌

  • SQL, NoSQL은 서로 반대의 개념도, 경쟁상대도 아님
    많은 회사들이 두 타입 모두 동시에 사용하기도 함
    하나의 시스템이 모든 경우에 만족된 서비스를 제공하지 못함
    만약 데이터가 급격하게 늘어나는 형태라면 NoSQL이 도움
profile
IT 기술블로그

0개의 댓글