M100: MongoDB for SQL Pros - 1

김하영·2022년 11월 30일
0

LESSON 1: CONCEPTS OF RDBMS AND MONGODB

- MongoDB는 기존 RDBMS 와 근본적으로 다른 모델인 document 모델을 기반으로 한다.

- MongoDB를 분산 데이터베이스라고 한다.
-> 다른 서버에 중복 복사본을 유지함으로써 MongoDB에 기본적으로 구축된다.
-> 여러 서버에 걸쳐 원활하게 확장되어 데이터를 저장하고 처리한다.
-> 데이터를 필요한 곳으로 이동할 수 있다. 빠른 액세스를 위해 전 세계의 가까운 사용자에게 데이터를 보관할 수 있다.
(???이건 몰랐는데...? MongoDB Cloud 기능인건가..?)

- NoSQL Databases

관계형 데이터 베이스

  • 수평적 확장이 가능하다. 즉, 읽기가 분산될 수 있도록 데이터를 다른 시스템에 복사한다.
    그러나 쓰기를 배포하는 쉬운 방법은 없다.

위 문제점을 해결하기 위해 나온게 NoSQL !

비관계형 데이터 베이스

  1. Key-Value Database
    기본적인 패턴으로 KEY-VALUE 하나의 묶음(Unique)으로 저장되는 구조로 단순한 구조이기에 속도가 빠르며 분산 저장 시 용이하다.
    Key 안에 (COLUMN, VALUE) 형태로 된 여러 개의 필드, 즉 COLUMN FAMILIES 갖는다.
    엑세스 속도는 빠르지만, SCAN에는 용이하지 않다.

  2. Graph Database
    데이터를 노드로 표현하며 노드 사이의 관계를 엣지로 표현한다.
    일반적으로 RDBMS 보다 성능이 좋고 유연하며 유지보수에 용이하다.

  3. Wide-Column Database
    행마다 키와 해당 값을 저장할 때마다 각각 다른값의 다른 수의 스키마를 가질 수 있다.
    위 그림을 참고하면 key에 해당하는 값에 스키마들이 각각 다름을 볼 수 있다.
    이러한 구조를 갖는 WIDE COLUMN DATABASE 는 대량의 데이터의 압축, 분산처리, 집계 쿼리 (SUM, COUNT, AVG 등)및 쿼리 동작 속도 그리고 확장성이 뛰어난 것이 그 대표적 특징이라 할 수 있다.

  4. Document Database
    테이블의 스키마가 유동적, 즉 레코드마다 각각 다른 스키마를 가질 수 있다.
    보통 XML, JSON과 같은 DOCUMENT를 이용해 레코드를 저장한다.

RDBMS VS NoSQL

MongoDB 도 트랜잭션을 제공한다.
(초반에 실무에서 사용할 때에는 트랜잭션 기능 제공 안한다고 들었던 기억이..?)

https://www.mongodb.com/docs/manual/core/transactions/?_ga=2.232311135.1727253100.1669721538-788833776.1669721538

- SQL/RDBMS Refreshers

장애 발생 시, 다시 회복하여 정상 동작하기 위해서 MongoDB 또한 동일하게 아래 기능(?)을 제공한다.

ACID

  • Atomicity (원자성)
    -> 트랜잭션과 관련된 작업들이 부분적으로 실행되다가 중단되지 않는 것을 보장하는 능력이다.
    -> MongoDB는 각각의 Document에 대해 원자성을 지닌다.
    -> 여러 Document에 대해서도 만족하려면 $Isolated operator를 사용해야한다.

  • Consistency (일관성)
    -> 트랜잭션이 실행을 성공적으로 완료하면 언제나 일관성있는 데이터베이스 상태로 유지해야한다.
    -> 무결성 제약조건, 비명시적 조건과 같은 조건이 전 후에도 지켜져야 한다.
    -> MongoDb는 Database수준까지 일관성을 유지한다.

  • Isolation (독립성)
    -> 여러 트랜잭션이 동시에 수행되더라도 각각의 트랜잭션은 다른 트랜잭션의 수행에 영향을 받지 않고 독립적으로 수행되어야 한다.
    -> 특정 명령어에 대해서 일정 수준의 독립성이 보장된다.

  • Durability (지속성)
    -> 트랜잭션이 성공적으로 완료되어 커밋되고 나면, 해당 트랜잭션에 의한 모든 변경은 향후에 어떤 소프트웨어나 하드웨어 장애가 발생 되더라도 보존되어야 한다는 것을 의미한다.
    -> MongoDB 는 Replica set을 설정하면 DB수준에서 보존된다.

High Availability (고 가용성)

MongoDB의 고가용성은 Replica set 내부에서 처리된다.
샤딩된 클러스터 구조뿐만 아니라 단일 Replica set 에서 고가용성이 처리된다.
따라서, 장애가 발생하여 중단이 발생해도 금방 복구하여 정상 작동하게 된다.

Replication

- The Document Model

  • Document 는 데이터를 필드-값 쌍의 집합으로 구성하고 저장하는 방법이다. (=JSON)

-> JSON & BSON

  • 사용자들이 보는 MongoDB에 document 들은 JSON 객체로 표기

  • 내부적으로 MongoDB에 document를 저장하기 위해서 BSON 객체로 사용
    -> 그 이유는 BSON 이 JSON 에서 누락된 데이터 타입을 지원하기 때문이다.
    예) JSON 은 숫자값을 그냥 NUMBER 타입으로 지정 / BSON 은 int,long,float,decimal

- ACID with Transactions and Documents

Documents

  1. A(Atomic) : 한 문서에 대한 쓰기는 한번만 수행되므로 원자적이다.
  2. C(Consistency) : 다른 문서에 종속성이 없어 일관성을 제공한다.
  3. I(Isolation) : 수정된 문서는 작업이 완료될 때까지 다른 읽기 또는 쓰기 작업에서 볼 수 없다.
  4. D(Durability) : 내구성에 관해서는 쓰기 고려를 'majority'로 수행하면 얻을 수 있다.
    -> 레플리카 셋에서 다수의 멤버들이 최신의 데이터를 가졌을 때에만 읽기 결과가 반환됨.

Transactions

  1. A(Atomic) : 모든 문서에 대한 모든 쓰기는 한번에 커밋되거나 롤백된다.
  2. C(Consistency) : 모든 일관성 체크는 트랜잭션 내에서 수행된다.
  3. I(Isolation) : 트랜잭션의 작업만 데이터베이스에 일관되고, 고정된 보기를 제공하는 스냅샷 격리를 사용 하여 변경사항을 볼 수 있다.
  4. D(Durability) : 트랜잭션이 'majority' 쓰기 연산을 사용하기 때문에 내구성이 보장된다.
  • 4.2 버전 샤딩된 클러스터에서는 트랜잭션 기능을 사용할 수 있다.
    (오? 이번에 버전 업 하면 사용가능??)

나머지는 이전 시간에 이야기 했던 내용...

참고 : https://university.mongodb.com/dashboard

profile
Back-end Developer

0개의 댓글