NoSQL
1. NoSQL 데이터베이스란?
Not Only SQL의 약자로 기존 RDBM 형태의 관계형 데이터베이스가 아닌 다른 형태의 데이터 저장 기술을 의미한다.
기존의 정형화된 데이터뿐만 아니라 메신저 텍스트, 음성 등 반정형화, 비정형화된 데이터도 저장하고 다뤄야 하는 수요가 생겼다.
빅데이터를 다룰 때, RDBMS로만 트래픽을 감당하기 어려워졌고, 이를 해결하기위해 NoSQL이 등장했다. NoSQL은 분산 환경을 빠르게 처리하기 위해서 개발되었다.
NoSQL의 핵심은 Horizontal Scalability(수평확장)과 High Availability(고가용성)이다.
- RDBMS 가 클라이언트/서버 환경에 맞는 데이터 저장기술이라면, NoSQL은 클라우드 환경에 맞는 저장 기술이다.
RDBMS의 한계
많은 데이터량과 데이터 처리량이 계속적으로 증가한다면
- 스키마 문제 : 빅데이터를 RDB의 스키마에 맞춰 변경해서 넣으려면 매우 긴 시간의 down time이 발생한다.
- Scale up(서버 자체의 성능을 증가)의 한계 : RDBMS는 애초에 스케일 아웃을 염두에 두고 설계하지 않았다. 관계형 모델과 트랜잭션의 연산, 일관성, 속성을 유지하면서 분산환경(Scale Out)에서 RDBMS를 조작하는것은 어렵다.
2. NoSQL 특징
- 대용량 데이터 저장을 한다.
- 분산형 구조를 통해 여러대의 서버에 분산하여 저장하고 상호 복제하여 데이터 유실이나 서비스 중지에 대비한다.
- Schema-less : 데이터간의 관계를 정의하지 않기때문에 Table간의 join이 불가능하다. (Foreign Key 와 같은 개념도 존재하지 않는다)
- 읽기 작업보다 쓰기 작업이 더 빠르며, 일반적으로 RDBMS에 비하여 쓰기와 읽기 성능이 빠르다.
- (참고) key 구조가 단순한 단일 테이블 조회라면, RDB도 성능차이가 크진 않다. 하지만 NoSQL은 대부분 메모리 사용율이 높다보니 RDB보다는 read 속도가 빠른편이다.
3. CAP
RDBMS는 ACID(원자성, 일관성, 고립성, 영구성) 특성을 따른다. ACID는 DB의 트랜잭션이 안전하게 수행된다는 것을 보장하기 위한 특징이다.
분산형 구조는 일관성(Consistency), 가용성(Availability), 분산 허용(Partitioning Tolerance) 3가지 특징을 가지고 있다. CAP 이론은 이 중 2가지만 만족할 수 있다는 이론이다. NoSQL은 이 CAP 이론을 따른다.
일반적으로 RDBMS는 일관성과 가용성을 만족한다. NoSQL은 가용성과 분산허용을 만족하는 제품군과 일관성과 분산허용을 만족하는 제품군으로 나눌수있다.
- 일관성(Consistency) : 분산된 노드 중 어느 노드로 접근하더라도 데이터 값이 같아야 한다.
- 가용성(Availability) : 클러스터링 된 노드 중 하나 이상의 노드가 실패(Fail)되더라도 정상적으로 요청을 처리할 수 있는 기능을 제공한다.
- 분산 허용(Partitioning Tolerance) : 클러스터링 노드 간에 통신하는 네트워크가 장애가 발생하더라도 정상적으로 서비스를 수행한다. 노드 간 물리적으로 전혀 다른 네트워크 공간에 위치도 가능하다.
4. NoSQL 데이터 모델 분류
NoSQL은 거대한 Map<String, Object>라고 할 수 있다. 따라서 대부분 NoSQL은 Key-Value 개념을 지원한다. 보통 key에 저장되는 값에 따라 NoSQL을 분류한다.
4.1 Key-Value Database : Redis
- 단순한 저장구조를 가지며, 복잡한 조회 연산을 지원하지 않는다.
- 고속 읽기와 쓰기에 최적화된 경우가 많다. key에 대한 단위 연산이 빠른것이지, 여러 key에 대한 연산은 느릴 수 있다.
- Value는 문자열이나 정수와 같은 원시 타입이 들어갈 수도 있고, 또 다른 key-value 가 들어갈 수도 있다. 이를 Column Family이라고 하며, Key 안에 (Column, Value) 조합으로 된 여러 개의 필드를 갖는 것을 말한다.
4.2 Document Database : MongoDB
- Key-Value 의 확장된 형태로, value에 Document 라는 타입을 저장한다. (Document는 구조화된 문서 데이터(XML,JSON 등)을 말한다)
- 복잡한 데이터 구조를 표현가능하다.
- Document id 또는 특정 속성값 기준으로 인덱스를 생성한다. 이 경우 해당 key값의 range에 대한 효율적인 연산이 가능해지므로 이에 대한 쿼리를 제공한다. 따라서 Sorting, Join, Grouping 등이 가능해진다.
- 쿼리 처리에 있어서 데이터를 파싱해서 연산해야하므로 오버헤드가 key-value 모델보다 크다. 큰 크기의 document를 다룰 때는 성능이 저하된다.
5. SQL, NoSQL 언제 사용해야할까?
- SQL : 관계를 맺고 있는 데이터가 자주 변경 될 경우 NoSQL 에서는 여러 컬렉션을 수정해야한다. 명확한 스키마를 보장할 경우
- NoSQL : 정확한 데이터 구조를 알 수 없거나 데이터의 구조가 변경 / 확장 될 경우.
- 페이스북이나 트위터 같은 소셜 네트워크 서비스에서는 게시글들을 저장하는데 NoSQL 데이터베이스를 사용한다.
6. RDB와 MongoDB 비교
'CS Study' 카테고리의 다른 글
대칭키, 비대칭키(공개키) 정리 (0) | 2021.04.21 |
---|