Data/DB

[DB] MongoDB - 몽고DB에 대해서

뚱요 2021. 11. 16. 04:18
반응형

관계형 데이터 베이스  vs 비 관계형 데이터 베이스  

관계형 데이터 베이스

비 관계형 데이터 베이스  

ACID(원자성, 일관성, 고립성, 지속성)
 2차원 table
SQL 쿼리
안정성, 범용성
데이터 무결성이 중요한 경우 RDBMS (결제, 예약)
복잡한 쿼리가 빈번한 경우
e.g MySQL, Oracle, PostgreSQL
데이터 처리량 & 서버 요구량 급증하면서 처리량 늘리기 위해서 속도 증가 필요함
현대적 설계 도입(분산 컴퓨팅)
확장성, 성능 최적화, 기능에 특화,유연성,고성능,고기능성
e.g. MongoDB(범용성, 안정적) ElaticSearch(전문검색), Redis(캐싱)
ACID
데이터 베이스 트랜잭션이 안전하게 수행된다는 것을 보장하기 위한 성질을 가리키는 약어

MongoDB(몽고 DB)

크로스 플랫폼 도큐먼트 지향 데이터베이스 시스템이다. NoSQL 데이터베이스로 분류되는 몽고 DB는 JSON과 같은 동적 스키마형 도큐먼트들(몽고DB는 이러한 포맷을 BSON라 부름)을 선호함에 따라 전통적인 테이블 기반 관계형 데이터베이스 구조의 사용을 삼간다. 이로써 특정한 종류의 애플리케이션을 더 쉽고 더 빠르게 데이터 통합을 가능케 한다. 아페로 GPL과 아파치 라이선스를 결합하여 공개된 몽고DB는 자유-오픈 소스 소프트웨어이다.(출처:위키백과)

NoSQL(Not Only SQL)
기존의 관계형 데이터베이스의 한계를 극복하기 위해 만들어진 유연한 데이터베이스

특징

  • 범용성과 기능 안정화로 인해 가장 유명한 NoSQL 데이터베이스 시스템
  •  분산 컴퓨팅 기반에 내부적으로 지원하는 DBMS 
  • write-concern, read-concern : 읽기, 쓰기 기본 설정
  •  세팅 없이 사용하다가 단일 인스턴스 쓰기 작업 중 에러 나면 데이터가 의도치 않게 중간 상태로 저장되거나 유실될 수 있다.

기능

  • Ad-hoc Query(애드혹 쿼리)
    • 필드, 레인지 쿼리, 정규표현식 검색 지원
  • Index : Primary & Secondary index 사용
  • replica set
    • 둘 이상의 데이터를 사본으로 구성, 각 세트 멤버는 어느 시점에서나 Primary / Secondary  리플리카 역할 수행 가능
  • 로드 밸런싱: 샤딩을 사용하여 수평으로 스케일링
  • Aggregation
    • 애그리게이션 파이프라인(aggregation pipeline), 맵리듀스 기능(map-reduce function), 단일 목적 애그리게이션 방식(single-purpose aggregation method)
  • Server-side  JS 실행
  • 파일 스토리지 :GridFS(그리드 파일 시스템)
  • 일관성 모델 제공, 내부 명령어 JS 형식( C로 개발됨) JS기반프로젝트
  • 언어 통일 시켜 정보 변환 없이 전달 가능 웹 개발
  • Bson(Binary JavaScript Object Notation)
    • 다양한 자료형 지원 성능 확장 용이
  • 분산 컴퓨팅: 복제 & 샤딩
    • 복제(복사하여 저장)
      • 안전성
      • 원본 서버가 망가져도 정상 서비스 가능
    • 샤딩(나누어 저장)
      • 성능 향상 
      • 성능 향상(읽기, 쓰기)

장점

  • NoSQL 
    • 스키마 없음
      • 전통적 관계형 데이터베이스보다 덜 제한적인 일관성 모델
    • 다양한 자료형 지원
      • BSON :JSON과 유사
      • 유연한 구조

JS 친화적

  • SQL 몰라도 V8엔진의  JS 기반 쉬운 DBMS 표방
  • 웹 개발자에게 낮은 진입구간
  • 성능 향상
    • 2008 V8 엔진 등장 - 속도 획기적 향상 (Chrome 백엔드에 NodeJS 등장)

단점

높은 러닝 커브

RDBMS의 구조와 비교

RDBMS MongoDB
Database Database
Table(테이블) Collection(콜렉션)
Tuple / Row(행) Document(도큐먼트)
Column(열) Key / Field(필드)
Join(조인) Embedded Documents(임베디드된 도큐먼트)
Primary Key(주 키) Primary Key (_id)

활용

 
  • 언어를 JS로 통일
  • 저장할 정보의 형태가 자주 변경되는 경우
  • 높은 성능이 필요한 서비스
  • 파일럿 프로젝트 
    • 데이터 구조 쉽게 바뀔 수 있는 신규 프로젝트
    • 더 많은 기능과 성능 확장에 용이
  • 비 정형화된 정보 전산화 (정형화하기 힘든 로그성 정보 저장, 조회)

 

 

 

CRUD

DB구조

트리구조: 데이터베이스> 컬렉션> 도큐먼트

Pymongo에 들어가기에 앞서 몽고DB의 기본적 명령어 맛보기로 확인

1) DB 접속

use myDatabase
switched to db myDatabase

 

2) 정보 저장

db.initialCollection.insertOne({ docs:” ”})

Bson구조

{
        "acknowledged" : true,
        "insertedId" : ObjectId("618e958bec49ada83b4b8068")
}

 

3) 조회

db.initialCollection.find()
{ "_id" : ObjectId("618e958bec49ada83b4b8068"), "hello" : "world" }
반응형

'Data > DB' 카테고리의 다른 글

[DB] SQL Alchemy  (0) 2021.11.19
[OpenAPI] 공공데이터 포털 API 사용법  (0) 2021.11.17
[DB] MariaDB 시작하기(MAC)  (0) 2021.11.10
[DB]MYSQL Workbench 시작하기  (0) 2021.11.10
SQL(Structured Query Language) 2 : 키워드,연산자,함수  (0) 2021.10.30