티스토리 뷰

etc

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

아풀 아풀 2020. 2. 17. 10:50

_NoSQL이란

  • Not Only SQL의 약자

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

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

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

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

RDBMS의 한계

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

 

_NoSQL 특징

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

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

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

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

 

_CAP 이론

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

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

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

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

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

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

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

 

_데이터 모델 분류

1) Key/Value Database : Redis, Oracle Coherence

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

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

  • 메모리를 저장소로 쓰는 경우, 아주 빠른 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

  • 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에 대한 속성등을 가짐

 

_No SQL 데이터 모델링 패턴

1) Denormalization(비정규화)

  • 같은 데이터를 중복해서 저장하는 방식

  • 비정규화를 하면 테이블간의 Join을 없앨 수 있다.

  • NoSQL에서 두 테이블을 Join하여 데이터를 가져오는 로직을 구현하려면, 각각의 테이블에서 데이터를 가져와 합쳐야하기 때문에 2번의 IO가 발생한다. 이 때, 비정규화를 적용하여 하나의 테이블에 Join될 데이터를 중복 저장하게 되면 1번의 IO로도 데이터를 가져올 수 있다.

장점

  • 쿼리 당 IO횟수 감소

  • 쿼리 데이터 사이즈 감소

  • 쿼리 수행 복잡도 감소

단점

  • 전체 데이터 사이즈 증가

  • 데이터 일관성 문제 발생 가능

 

2) Aggregation

  • NoSQL의 특성 중의 하나인 Scheme-less / Soft Scheme라는 특성을 이용하여 1:N같은 복잡한 entity들의 관계를 손쉽게 하나의 테이블로 바꿀 수 있음

  • join 연산을 줄임 > 수행시간 단축, 저렴한 비용의 대용량 데이터 지원 가능

 

  • RDBMS는 데이터를 넣을 때, 테이블의 구조에 맞도록 넣어야하기 때문에 컬럼수와 이름도 지켜야하고 데이터 타입도 준수해야한다. 하지만 NoSQL의 경우 Key만 똑같으면 각 Row는 제멋대로라도 상관없기 때문에 아래와 같이 하나의 테이블로 합칠 수 있다.

 

3) Application Side Join

  • 어쩔 수 없이 Join기능을 구현해야 하는 경우, NoSQL을 사용하는 client application단에서 Join로직을 처리해야함

  • Join이 필요한 테이블의 수 만큼 NoSQL로의 Request/Response IO가 발생하긴 하지만, Denormalization등에 비해서 스토리지 사용량은 감소

 

 


참고

NoSQL 특징 : https://sjh836.tistory.com/97

NoSQL 데이터 모델링 패턴 : https://bcho.tistory.com/666?category=431293

 

댓글
댓글쓰기 폼