NoSQL - 특징, 종류, 데이터모델링

zioo·2022년 1월 17일
0

Backend

목록 보기
22/40

NoSQL

Not Only SQL의 약자

  • 기존 RDBMS의 한계를 극복하기 위해 만들어진 새로운 형태의 DB

  • 고정된 스키마가 없고, 조인이 힘듦

  • 빅데이터, 분산 환경에서 대용량의 데이터를 처리하기 위해 개발

  • Horizontal Scalability(수평 확장), High Availability(고가용성)

  • Scale out

RDBMS의 한계

  • 대용량의 데이터가 계속 들어온다면, 스키마에 맞춰 변경해서 넣기 위해 긴 시간의 down time이 발생

NoSQL 특징

  • 거대한 Map으로서 key-value 형식을 지원

  • RDBMS는 Foreign Key, Join 등으로 관계를 정의하지만, NoSQL은 관계를 정의하지않음

  • 대용량 데이터를 저장할 수 있음

  • 읽기/쓰기의 성능이 RDBMS보다 빠름


RDBMS와 NoSQL의 장단점

RDBMS

장점

  • RDBMS는 정해진 스키마에 따라 데이터를 저장하여야 하므로 명확한 데이터 구조를 보장하고 있습니다.
  • 관계는 각 데이터를 중복없이 한 번만 저장할 수 있습니다.

단점

  • 테이블간테이블 간 관계를 맺고 있어 시스템이 커질 경우 JOIN문이 많은 복잡한 쿼리가 만들어질 수 있습니다.
  • 성능 향상을 위해서는 서버의 성능을 향상 시켜야하는 Scale-up만을 지원합니다.
    - 이로 인해 비용이 기하급수적으로 늘어날 수 있습니다.
  • 스키마로 인해 데이터가 유연하지 못합니다. 나중에 스키마가 변경 될 경우 번거롭고 어렵습니다.

NoSQL

장점

  • NoSQL에서는 스키마가 없기 때문에 유연하며 자유로운 데이터 구조를 가질 수 있습니다.
    - 언제든 저장된 데이터를 조정하고 새로운 필드를 추가할 수 있습니다.
  • 데이터 분산이 용이하며 성능 향상을 위한 Saclue-up 뿐만이 아닌 Scale-out 또한 가능합니다.

단점

  • 데이터 중복이 발생할 수 있으며 중복된 데이터가 변경 될 경우 수정을 모든 컬렉션에서 수행을 해야 합니다.
  • 스키마가 존재하지 않기에 명확한 데이터 구조를 보장하지 않으며 데이터 구조 결정가 어려울 수 있습니다.

RDBMS, NoSQL 언제 사용해야 될까요?

RDBMS

데이터 구조가 명확하며 변경 될 여지가 없으며 명확한 스키마가 중요한 경우 사용하는 것이 좋습니다.
중복된 데이터가 없어(데이터 무결성) 변경이 용이하기 때문에 관계를 맺고 있는 데이터가 자주 변경이 이루어지는 시스템에 적합합니다.

NoSQL

정확한 데이터 구조를 알 수 없고 데이터가 변경/확장이 될 수 있는 경우에 사용하는 것이 좋습니다.
단점에서도 명확하듯이 데이터 중복이 발생할 수 있으며 중복된 데이터가 변경될 시에는 모든 컬렉션에서 수정을 해야 합니다. 이러한 특징들을 기반으로 Update가 많이 이루어지지 않는 시스템이 좋으며 또한 Scale-out이 가능하다는 장점을 활용해 막대한 데이터를 저장해야 해서 Database를 Scale-Out를 해야 되는 시스템에 적합합니다.


CAP 이론

분산형 구조는 일관성(Consistency), 가용성(Availability), 분산 허용(Partitioning Tolerance)의 3가지 특징을 가지고 있다.

CAP이론은 이 중 2가지만 만족할 수 있다는 이론인데, NoSQL은 대부분 이 CAP이론을 따른다.

  • 일관성(Consistency) : 분산된 노드 중 어느 노드로 접근하더라도 데이터 값이 같아야한다.

  • 가용성(Availability) : 클러스터링된 노드 중 하나 이상의 노드가 실패라도 정상적으로 요청을 처리할 수 있는 기능을 제공한다.

  • 분산 허용(Partitioning Tolerance) : 클러스터링 노드간에 통신하는 네트워크 장애가 나더라도 정상적으로 서비스를 수행한다. 노드 간 물리적으로 전혀 다른 네트워크 공간에 위치도 가능하다.

일반적으로 RDBMS는 일관성, 가용성을 만족한다.

NoSQL은 가용성, 분산허용을 만족하는 제품군과 일관성, 분산허용을 만족하는 제품군으로 나눌 수 있다.

데이터 모델 분류

1) Key/Value Database : Redis, Oracle Coherence,DynamoDB

단순한 저장구조를 가지며, 복잡한 조회 연산을 지원하지 않음

고속 읽기와 쓰기에 최적화된 경우가 많음

메모리를 저장소로 쓰는 경우, 아주 빠른 get과 put을 지원

Value는 문자열이나 정수와 같은 원시 타입이 들어갈 수 있고, 또 다른 key/value가 들어갈 수도 있음. ( Column Family )

2) Big Table Database (Ordered Key/Value) : Hbase, Cassandra

key/value store와 데이터 저장 방식은 동일

보통의 NoSQL은 order by같은 정렬기능을 제공하지 않지만, 이 모델은 내부적으로 key를 정렬

날짜나 선착순으로 정렬해서 보여줄 때 유용

3) Document Database : MongoDB, CouchDB, Riak, RethinkDB

key/value store의 확장된 형태로, value에 Document라는 타입을 저장 (Document : XML, JSON, YAML 등)

복잡한 데이터 구조 표현 가능

Document id 또는 속성값 기준으로 인덱스를 생성

key값의 range에 대한 효율적인 연산이 가능해지므로 이에 대한 쿼리를 제공

Sorting, Join, Grouping등이 가능

쿼리 처리에 있어서 데이터를 파싱해서 연산해야 하므로 overhead가 key-value 모델보다 큼

B트리 인덱스를 사용하여 2차 인덱스를 생성 > B트리는 크기가 커질 수록 insert, delete의 성능이 떨어짐 (읽기/쓰기 비율이 7:3일 때 더 좋은 성능을 보임)

B트리 특성 때문에 자주 변하지 않는 정보를 저장하고 조회하는데 적합 (로그, 타임라인, 채팅로그 등)

4) Graph Database : Sones, AllegroGraph, neo4j

node들과 relationship들로 구성된 개념

key/value store방식이며 모든 노드는 끊기지 않고 연결되어 있어야함

relationship은 direction, type, start node, end node에 대한 속성등을 가짐


MongoDB

MongoDB는 C++로 작성된 오픈소스 문서지향(Document-Oriented) 크로스 플랫폼 데이터베이스이다.

특징

  • 여러 데이터가 모인 하나의 단위를 컬렉션(Collection)이라고 부릅니다.

  • 문서지향 데이터베이스

  • 스키마가 없다

    몽고 디비는 스키마가 존재하지 않는다. 이 것은 필요할 때 마다 필드를 추가하거나 제거하는 것이 매우 쉬워졌음을 의미한다. 따라서 개발 과정이 매우 단순해지고 빠르게 개발이 가능하게 된다.

  • 스케일 아웃이 가능하다.

  • 범용 데이터베이스

  • 조인과 트랜잭션 없음

  • 매우 고성능이다

RethinkDB

리얼타임 웹에 최적화된 오픈소스 데이터베이스

  • 실시간에 최적화 되어 있다.
  • JSON 기반의 데이터베이스이다.
  • 업데이트가 발생 되었을 시 지속적/실시간으로 push를 해준다.
  • 확장이 쉬운 분산 데이터베이스
  • 실시간 웹 애플리케이션 구죽을 위한 오픈소스 데이터 베이스
  • 웹UI 관리 콘솔을 제공한다.(서버 성능 확인, 쿼리테스트 데이터 테이블과 샤드 등등을 관리하는 도구이다.)

CouchDB

Apache의 CouchDB를 기반으로 새롭게 만든 솔루션이 카우치베이스 Server라는 NoSQL 솔루션이다

  • 고성능 NoSQL(비 관계형)로 MongoDB와 같이 JSON Document에 저장하는 Document DB이다.

특징

  • NoSQL의 분산 이론인 CAP 이론에서 CP (Consistency & Partition tolerance)의 부분에 해당하여 데이터에 대한 일관성과, 노드 간의 네트워크 장애 시에도 서비스를 제공한다.
  • Memcached 기반의 Level 2 캐시를 내장하여 빠름
  • 모바일 디바이스에 탑재 가능
  • 웹 기반의 GUI 관리 도구를 기본으로 제공
  • RDBMS들이 지원하는 index, grouping, ordering 기능을 지원
  • 데이터센터 간 복제 가능
  • 다양한 언어의 SDK(software development kit)를 지원(JAVA, C#, PHP, C, Python, Ruby 등)
  • 구조: 여러 개의 노드로 이루어진 클러스터로 구성

DynamoDB

완전히 관리(Fully managed)되는 AWS 상의 NOSQL 데이터베이스

  • NoSQL(Not Only SQL) 데이터베이스
  • 매우 빠른 쿼리 속도
  • Auto-Scaling 기능 탑재
    중요한 특징, 처음 데이터베이스를 만들면 크기가 정해지는데, Auto-Scaling의 경우는 데이터 크기 초과/축소될 때 테이블이 알아서 늘어나고 줄어든다. 비용 이점
  • Key-Value 데이터 모델 지원
  • 테이블 생성시 스키마 생성 필요 없음
    실시간으로 들어오는 데이터를 보관하는데 탁월
  • 모바일, 웹, IoT데이터 사용시 추천됨
  • SSD 스토리지 사용따라서 읽고 쓰는데 속도 빠름

Dynamo DB 구성

  • 테이블 (Table)
  • 아이템 (Items) - 행(row)과 개념이 비슷함
  • 특징 (Attributes) - 열(column)과 개념이 비슷함
  • Key-Value (Key : 데이터의 이름, Value : 데이터 자신)예시) JSON, XML와 같이 Key-Value 형식

0개의 댓글