NoSQL
은 Non Relational Operation Database SQL의 줄임말이며, RDB가 아닌 SQL입니다.
NoSQL 특징
- 빅데이터 기술은 기존의 관계형 데이터베이스로 처리하게 힘든 상황에서 작동한다.
- 테라 혹은 페타급 데이터를 처리해야하기 때문에 이 데이터를 정규화(중복제거)하는 것은 실직적으로 불가능하다.
그렇기 때문에 NoSQL은 정규화를 하지 않고 데이터를 중복하여 저장하는 것이다.
- NoSQL은 ACID를 따르지 않고 CAP이론을 따른다.
NoSQL 장점
- 불 필요한 Join의 최소화
- 유연성있는 서버 구조 제공
- 비정형 데이터 구조로 설계비용 감소
- Read/Write가 빠르며
빅데이터 처리
가 가능- 저렴한 비용으로
분산처리 및 병렬처리
가능
NoSQL 단점
- 데이터 업데이트 중 장애가 발생하면 데이터 손실 발생 가능
- 많은 인덱스를 사용하려면 충분한 메모리가 필요하다.
- 데이터 일관성이 항상 보장되지 않음.(실질적인 CAP이론의 한계?)
SQL vs NoSQL
Consistency(일관성)
- 분산된 노드 중 어느 노드로 접근하더라도 데이터 값이 같아야한다.
- 모든 클라이언트는 동일한 시간에 동일한 항목에 대해 동일한 데이터를 보장받아야한다.
Acailability(가용성)
- 분산 노드 중 하나 이상의 노드가 실패하더라도 정상적으로 요청을 처리할 수 있는 기능을 제공해야한다. 여러개의 서버에 데이터를 저장하여 장애를 극복해야한다는말 ...?
- 모든 클라이언트는 네트워크 장애에도 정해진 시간에 원하는 값을 얻을 수 있어야한다.
Partion Tolerance(분산허용)
- 분산 노드 간에 통신하는 네트워크가 장애가 나더라도 정상적으로 서비스를 수행해야한다.
- 노드간 메시지 손실이 발생해도 시스템의 속성(일관성, 가용성)을 유지해야한다.
NoSQL은 기본적으로 Map(Key-Value)구조를 기본으로 한다.
데이터와 컬럼의 중첩을 허용하며 정해진 스키마를 가지고 있지 않다.
NoSQL은 데이터 구조에 따라 크게 4가지로 나뉨Key-Value
- 기본적인 패턴으로 Key-Value 하나의 묶음(Unique)으로 저장되는 구조로 단순한 구조이기에 속도가 빠르며 분산 저장 시 용이하다.
컬럼 확장형
- 행마다 키와 해당 값을 저장할 때마다 각각 다른 값의 다른 수의 스키마를 가질 수 있다.
- 대량의 데이터 압축, 분산처리, 집계 쿼리 및 쿼리 동작 속도 그리고 확장성이 뛰어난 것이 특징이다.
도큐먼트형 (MongoDB, Azure Cosmos DB, CouchDB)
- 테이블의 스키마가 유동적, 레코드마다 각각 다른 스키마를 가질 수 있다. (자유롭게 컬럼을 추가할 수 있다?)
- 보통 XML, JSON과 같은 DOCUMENT를 이용해 레코드를 저장한다.
- 트리형 구조로 레코드를 저장하거나 검색하는 데 효과적이다.
그래프형 (Neo4j, BlazeGraph, OrientDB)
- 데이터를 노드로 표현하며 노드 사이 관계를 엣지로 표현한다.