-
NoSQL
CS 지식/데이터베이스
2021. 1. 14. 15:35
NoSQL
- RDBMS를 지양하며 대량의 분산된 데이터를 저장하고 조회하는데 특화된 data store
- 동적 스케일 아웃을 지원
- CAP 이론
- 일관성 (Consistency)
- 다중 클라이언트에서 같은 시간에 조회하는 데이터는 항상 동일한 데이터 보증
- 관계형 데이터베이스가 지원하는 가장 기본적인 기능
- 일관성을 지원하지 않는 NoSQL 을 사용하면, 데이터의 일관성이 느슨하게 처리되어 동일한 데이터가 나타나지 않을 수 있음
- 느슨하게 처리된다는 것 === 데이터의 변경을 시간의 흐름에 따라 여러 노드에 전파하는 것
- 이러한 방법을 최종적으로 일관성이 유지된다고 하여 최종 일관성 또는 궁극적 일관성을 지원한다고 함
- 분산 노드 간의 데이터 동기화를 위해서 두 가지 방법
- 동기 방법
- 데이터의 저장 결과를 클라이언트로 응답하기 전에 모든 노드에 데이터를 저장
- 느린 응답시간, 정합성 보장
- 비동기 방법
- 메모리나 임시 파일에 기록하고 클라이언트에 먼저 응답 ~> 특정 이벤트 or 프로세스를 사용해서 노드로 데이터를 동기화
- 빠른 응답시간, 정합성 보장 X
- 가용성(Availability)
- 모든 클라이언트의 읽기와 쓰기 요청에 대해 응답이 항상 같음을 보증
- == 내고장성
- 내고장성 있는 NoSQL은 클러스터 내에 몇 개의 노드가 망가져도 정상 서비스
- 몇몇 NoSQL은 가용성 보장을 위해 데이터 복제를 사용
- 동일한 데이터를 다중 노드에 중복 저장 ~> 몇 대의 노드가 고장나도 유실되지 않도록
- 네트워크 분할 허용성(Partition tolerance)
- 지역적으로 분할된 네트워크 환경에서 동작하는 시스템에서 두 지역 간의 네트워크가 단절되거나 데이터 유실이 일어나도 각 지역 내의 시스템이 정상 동작해야함
- 종류
- Key-Value Model
- Redis가 대표 예
- 가장 기본적인 형태의 NoSQL, 키로 데이터 하나 저장 및 조회하는 키-값 구조
- 복잡한 연산 지원 X (~> 요즘 JOIN 지원한다는 소리가 있음)
- 읽기와 쓰기에 최적화
- 하나의 서비스 요청에 다수 데이터 조회 및 수정 연산이 발생하면, 트랜잭션 터리가 불가능하여 데이터 정합성 보장 X
- Document Model
- MongoDB가 대표 예
- 키-값 모델을 개념적으로 확장한 구조, 키에 구조화된 문서를 저장하고 조회
- 키는 문서에 대한 ID로 표현
- 저장된 문서를 컬렉션으로 관리 ~> 문서 저장과 동시에 ID에 대한 인덱스 생성
- B 트리 인덱스를 사용, 2차 인덱스를 생성함
- 따라서 읽기와 쓰기 비율이 7:3 정도일 때 가장 좋음
- 중앙 집중식 로그, 타임라인, 통계 정보 등 저장에 사용
- Column Model
- 하나의 키에 여러 컬럼 이름과 값의 쌍으로 이루어진 데이터를 저장하고 조회
- 모든 컬럼은 항상 타임 스탬프 값과 함께 저장