Database/기타

RDBMS의 한계와 NoSQL을 사용하는 이유 (3) NoSQL 장단점, 특징

TheWing 2021. 11. 27. 18:48

DB RDBMS의 한계와 NoSQL을 사용하는 이유 (3) NoSQL 장단점, 특징

NoSQL(Not Only SQL, 비-관계형 데이터베이스)

  • RDBMS의 복잡도와 용량 한계를 극복하기 위한 목적으로 등장했다.
  • 정해진 스키마가 없어 자유롭게 데이터를 저장할 수 있다.

특징

  • 유연성 : 스키마 선언 없이 필드의 추가 및 삭제가 자유로운 Schema-less 구조
  • 확장성 : 스케일 아웃에 의한 서버 확장이 용이
  • 고성능 : 대용량 데이터를 처리하는 성능이 뛰어나다
  • 가용성 : 여러 대의 백업 서버 구성이 가능하여 장애 발생 시에도 무중단 서비스가 가능

기대하는 특징

높은 확장성

  • 점진적으로 노드를 추가할 수 있어야 하고 이는 파티셔닝을 통해서 가능하다

높은 가용성

  • 실패의 단일 포인트가 없고 데이터는 복제되기 때문에 어떤 노드가 죽었을 때도 데이터는 이용이 가능해야한다

높은 성능

  • 디스크 대신 메모리 기반으로 결과는 빠르게 리턴되어야하고 이는 Non-Blocking Write와 낮은 복잡성을 가진 알고리즘을 통해서 이룰 수 있다.
    • 요청한 작업을 즉시 마칠 수 없다면 즉시 리턴해야한다
  • Non-Blocking

원자성

  • 각각의 쓰기는 원자성을 가질 필요가 있다

일관성

  • 강한 일관성은 필요 없고 결과적인 일관성만 가지면된다 (Read-Your-Writes)
    • 결과적인 일관성
    • Read-Your-Writes(RYW) 일관성은 레코드가 업데이트 되었을때 그 레코드에 대한 읽기 시도는 업데이트된 값을 돌려주는 것을 보장해주는 것의 의미합니다.

지속성

  • 데이터는 휘발성 메모리만이 아닌 디스크에서 유지되어야 한다

ETC

  • 배포, 모델링, 쿼리의 유연함

장점

  • 스키마가 없기 때문에 유연하다. 즉 언제든지 데이터를 조정하고 새로운 필드를 추가할 수 있다.
  • 수직 및 수평적 확장(샤딩) 이 가능하므로 데이터베이스가 애플리케이션에서 발생시키는 모든 읽기 / 쓰기 요청 처리가 가능하다
  • 데이터는 애플리케이션이 필요로 하는 형식으로 저장된다. 이렇게 하면 데이터를 읽어오는 속도가 빨라진다.

단점

  • 데이터베이스 일관성에 약하다. 이 일관성을 가용성, 분할 용인, 속도와 맞바꾸었다
    • 분할 용인 : 네트워크 실패로 인하여 임의의 분할이 발생해도 시스템은 계속적으로 동작해야 한다. 임의의 메시지들의 손실 또는 시스템의 부분 실패에도 불구하고, 시스템은 지속적으로 동작
  • key값에 대한 입출력만 지원한다.
  • 스키마가 정해져 있지 않아, 데이터에 대한 규격화가 되어 있지 않다.
  • 데이터가 여러 컬렉션에 중복되어 있어서 데이터를 UPDATE 하는 경우 모든 컬렉션에서 수행해야하기 때문에 느리다.
  • 데이터 중복으로 인한 수정 작업의 번거로움

종류

키-값 저장소(key-value)

  • Key와 Value으로 구성된 배열구조의 데이터베이스로 가장 단순한 구조

특징

  • 기본적인 패턴으로 Key, Value가 하나의 묶음으로 저장되는 구조이기 때문에 속도가 빠르며 분산 저장에 용이하다
  • 값에 모든 데이터 타입이 허용가능하다.
  • Key는 중복될 수 없고 이 Unique Key에 각각 하나의 Value를 가지고 있는 형태가 된다. 데이터를 조회 및 입력할 때, Key를 가지고 접근할 수 있다.

언제 사용하는게 좋을지?

  1. 성능 향상을 위해 RDBMS 에서 캐싱 (Redis)
  2. 장바구니 같은 웹애플리케이션에서 일시적인 속성 추적
  3. 이미지나 오디오 파일 같은 대용량 객체 저장

종류

  • Redis
  • AWS DynamoDB
  • Riak

그래프 저장소(graph)

  • 노드와 관계로 구성된 데이터베이스로 근접한 객체를 모델링할 목적으로 설계

특징

  • RDBMS보다 성능이 좋고 유연하며 유지보수에 용이한것으로 특징
  • Social Networks, Network diagrams 등에 사용

종류

  • Neo4j
  • Blazegraph
  • OrientDB

컬럼 저장소(column)

  • Key, Value와 유사한 형태이다. 단지 데이터가 내부적으로 Key를 기준으로 Sorting되서 저장되는 점이 차이가 있다. Order by를 제공하지 않는 NoSQL에서 다양한 방법으로 활용할 수 있다는 장점이 있다.
  • 컬럼과 로우로 구성된 데이터베이스로 컬럼은 이름과 값으로 구성되고 로우는 각기 다른 컬럼으로 구성이 가능

실 사용 서비스

Twitter

  • MySQL → Cassandra

Tumblr

  • Shorten URL 에서 사용중
  • MySQL → Hbase → Redis

CassandraDB

  • JVM기반 DB Engine이다
  • Java로 개발되어 JVM위에 실행되기 때문에 다른 운영체제로의 우수한 이식성을 갖지만, 이것은 또한 JVM 기반 어플리케이션이 공통적으로 갖고 있는 메모리 관리나, Garbage Collection과 같은 필수 작업으로 인해 성능제약이 필연적이다

문서 저장소(document)

  • Key, Value에서 확장된 형태이다. 저장되는 Value의 타입으로 Document라는 구조화된 데이터 타입(JSON, XML 등)이 사용된다. 복잡한 계층 구조를 잘 표현할 수 있다는 점이 장점이다. 제품에 따라 Sorting, Join, Grouping 등 RDB와 같은 추가 기능이 지원되기도 하다. 앞으로 정리할 MongoDB가 이 종류에 해당되며 여러 기능이 제공된다.
  • JSON 기반으로 통신을 하는 HTTP 웹 서버의 경우 편리하게 데이터를 사용할 수 있다.
  • NoSQL데이터베이스 중 가장 인기가 높다

특징

  • 계층적 트리 데이터 방식으로 저장
  • _id : PK, RowID를 가짐
  • 컬럼 없음 , Schema 없음

언제 사용하면 좋을지?

  1. 대용량 데이터를 읽고 쓰는 웹 사이트용 벡엔드 지원
  2. JSON 데이터 구조를 사용하는 애플리케이션
  3. 비정규화된 중첩 구조의 데이터를 사용하는 애플리케이션

종류

  • MongoDB
  • Azure Cosmose DB
  • Couch DB
  • MarkLogin
  • OrientDB

Replica Set

자동 장애 극복 지원. Master 장애시 Slave가 Master로 역할 전환

  • mongoDB에서는 primary, secondary 라고 부른다
  • 쓰기는 Master로 읽기는 Master, slave 모두 가능

실 사용 서비스

국내 무신사 : MongoDB 기반으로 AWS에서 출시한 AWS DocumentDB

  • 사용 이유 : 갱신(Update) 구문을 수행할 때 기존 데이터의 갱신이 아닌 갱신될 데이터를 신규로 등록하고 기존의 데이터는 점유해제 하는 방식으로 처리한다

NoSQL 사용시 효율적인 상황

  • 아주 낮은 응답 지연시간(latency) 이 요구됨
  • 다루는 데이터가 비정형이라 관계형 데이터가 아니다
  • 데이터(JSON, YAML, XML등)를 직렬화나 역직렬화 할 수 있으면 된다.
  • 아주 많은 양의 데이터를 저장할 필요가 있을때

어떤 상황에 사용하는지?

  • 데이터에 대한 캐시가 필요한 경우
  • 배열 형식의 데이터를 고속으로 처리할 필요가 있는 경우
  • 정확한 데이터 구조를 알 수 없거나 변경 / 확장 될 수 있는 경우
  • 읽기(read)처리를 자주하지만, 데이터를 자주 변경(update)하지 않는 경우 (즉, 한번의 변경으로 수십 개의 문서를 업데이트 할 필요가 없는 경우)
  • 데이터베이스를 수평으로 확장해야하는 경우 ( 막대한 양의 데이터를 다뤄야 하는 경우)

NoSQL DB vs RDBMS 간단 비교

NoSQL

기술 요소

  • BASE
  • (Basically Available, Soft State, Eventually Consistent)

기술 요소 상세

Basically Available(가용성)

 

Master 서버에 장애 발생 시에도 여러 Slave 서버로 인해 무중단 서비스가 가능함

 

 

Soft State(소프트 상태)

각각의 데이터가 도달한 시점에 데이터가 갱신됨

 

 

Eventually Consistent(결과적 일관성)

복제 메커니즘에 의해 모든 서버에 데이터 복제가 동시에 실행될 수 없음

시스템 부하 및 네트워크 속도에 따라 서버에 복제하는 시간이 다를 수 있으나 최종적으로는 모든 서버에 데이터가 복제됨

특징 : 데이터 가용성과 데이터 처리 성능이 향상되도록한다

중점 사항 : 서비스 가용성

참고

RDBMS

기술 요소

  • ACID
  • (Atomicity, Consistency, Isolation, Durability)

기술 요소 상세

Atomicity(원자성)

 

트랜잭션은 최소의 업무단위로 트랜잭션에 포함된 연산(① ~ ④)은 모두 처리되거나 또는 미처리되어야 함

 

Consistency(일관성)

트랜잭션 성공 시 DB는 일관된 상태를 유지해야 함

 

 

Isolation(격리성)

 

실행 중인 트랜잭션의 중간에 다른 트랜잭션(③번)이 접근할 수 없음

 

Durability(영속성)

트랜잭션 성공 시 그 결과는 장애 발생 여부와 관계없이 DB에 저장되어야 함

 

 

특징 : 데이터 일관성을 위해 트랜잭션이 안전하게 수행되도록 함

중점 사항 : 데이터의 일관성

참고