--목차--
NoSQL?
CAP이론
저장 방식에 따른 NoSQL 분류
--------
1. NoSQL?
1) 정의
SQL만을 사용하지 않는 데이터베이스.
관계형 데이터 모델을 지양하며 대량의 분산된 데이터를 저장하고 조회하는 데 특화됨.
스키마없이 사용가능하거나 느슨한 스키마를 제공하는 저장소.
2) 특징
종류마다 쓰기/읽기 성능 특화, 2차 인덱스 지원, 오토 샤딩 지원 같은 고유 특징을 가짐.
대량의 데이터를 빠르게 처리하기 위해 메모리에 임시 저장하고 응답하는 등 방법 사용.
동적 스케일 아웃 지원.
가용성을 위해 데이터 복제같은 방법으로 RDBMS가 제공하지 못하는 성능과 특징 제공.
(관련 데이터를 단일 데이터 구조 내에 중첩 가능)
2. CAP 이론
1) 일관성(Consistency)
동시성/동일성과 동의어.
다중 클라이언트에서 같은 시간에 조회하는 데이터는 항상 동일한 데이터임을 보증하는 것을 의미.
관계형 데이터베이스가 지원하는 가장 기본적인 기능이지만 일관성을 지원하지 않는 NoSQL을 사용한다면 데이터의 일관성이 느슨하게 처리되어 동일한 데이터가 나타나지 않을 수 있음.
느슨하게 처리된다는 것 : 데이터의 변경을 시간의 흐름에 따라 여러 노드에 전파하는 것.
(최종적으로 일관성이 유지된다고 하여 최종 일관성 / 궁극적 일관성 지원이라 칭함)
분산 노드 간 데이터 동기화를 위해 사용하는 방법
ㄱ. 동기식 방법
데이터의 저장 결과를 클라이언트로 응답하기 전에 모든 노드에 데이터를 저장.
느린 응답시간, 데이터의 정합성 보장
ㄴ. 비동기식 방법
메모리/임시 파일에 기록 후 클라이언트에 먼저 응답한 다음, 특정 이벤트 또는 프로세스를 사용해 노드로 데이터를 동기화.
빠른 응답시간.
쓰기 노드에 장애 발생시 데이터 손실.
2) 가용성(Availability)
내고장성과 동의어.
모든 클라이언트의 읽기와 쓰기 요청에 대해 항상 응답이 가능해야함을 보증.
이 특성을 가질 경우, 클러스터 내에서 몇 개의 노드가 망가져도 정상적인 서비스 가능.
NoSQL이 사용하는 방법
데이터 복제(Replication)
동일한 데이터를 다중 노드에 중복 저장하여 그 중 몇 대의 노드가 고장나도 데이터가 유실되지 않도록 하는 방법.
Master-Slave 복제 방법(동일한 데이터를 가진 저장소를 하나 더 생성), Peer-to-Peer(데이터 단위로 중복 저장)
3) 네트워크 분할 허용성(Partition tolerance)
지역적으로 분할된 네트워크 환경에서 동작하는 시스템에서 두 지역 간의 네트워크가 단절되거나 네트워크 데이터의 유실이 일어나도 각 지역 내의 시스템은 정상적으로 동작해야 함을 의미.
3. 저장 방식에 따른 NoSQL 분류
1) Key-Value Model
가장 기본적인 형태.
키 하나로 데이터 하나를 저장하고 조회할 수 있는 단일 키-값 구조.
단순한 저장구조로 인해 복잡한 조회 연산을 지원하지 않음.
고속 읽기/쓰기에 최적화된 경우가 많음.
하나의 서비스 요청에 다수의 데이터 조회 및 수정 연산이 발생하면 트랜잭션 처리가 불가능하여 데이터 정합성 보장 불가. (Redis)
ex) 웹 서버 클러스터를 위한 세션 정보, 장바구니 정보, URL 단축 정보 저장 등에 사용.
2) Document Model
키-값 모델을 개념적으로 확장한 구조.
하나의 키에 하나의 구조화된 문서를 저장하고 조회.
논리적인 데이터 저장, 조회 방법이 RDBMS와 유사.
키는 문서에 대한 ID로 표현.
저장된 문서를 컬렉션으로 관리하면 문서 저장과 동시에 문서 ID에 대한 인덱스 생성.
문서 ID에 대한 인덱스를 사용하여 O(1)만에 문서 조회 가능.
대부분 B-Tree 인덱스를 사용해 2차 인덱스 생성.(크기가 커질수록 새 데이터 입력/삭제 시 성능이 떨어지므로 읽기 : 쓰기가 7 : 3 정도 가장 좋은 성능.)
ex) 중앙 집중식 로그 저장, 타임라인 저장, 통계 정보 저장, MongoDB
3) Column Model
하나의 키에 여러 개의 컬럼 이름과 컬럼 값의 쌍으로 이루어진 데이터를 저장, 조회
모든 컬럼은 항상 타임 스탬프 값과 함께 저장.
해당 모델의 NoSQL의 경우, 읽기와 쓰기 중 쓰기에 더 특화되어 있다.
(데이터를 먼저 커밋로그와 메모리에 저장한 후 응답하기 때문에 빠른 응답속도 제공.)
읽기 연산 대비 쓰기 연산이 많은 서비스 / 빠른 시간 내에 대량의 데이터 입력 및 조회 서비스 구현에 가장 베스트.
ex) 채팅 내용 저장, 실시간 분석을 위한 데이터 저장소 등의 서비스 구현
+++ 구글 빅테이블(여기서 영향을 받아 Row Key, Column Key, Family같은 빅테이블 개념 공통적으로 사용.
저장의 기본 단위 : Column(이름 + 값 + 타임스탬프)
Row : 컬럼의 집합.
Key Space : 로우의 집합)
참조