Relational DBMS
관계형 데이터 베이스로 객체를 나타내는 각 테이블의 관계로 정의되는 데이터 모델링 기법을 사용한다.
RDBMS에서 사용하는 테이블은 고정된 스키마가 존재하며 SQL 언어를 사용하여 데이터를 조작하고 ACID 특성을 보자한다.
NoSQL
고성능의 비관계적 데이터를 지향하기 위해 고안되었다. 빅데이터 등으로 저장해야하는 데이터 양이 늘어나자 수평적 확장에 대한 유연함이 요구 되었고 기존 관계형 데이터 베이스에서 고정된 스키마의 변경의 어려움을 극복하고자 하였다.
관계형 테이블을 만들지 않고 모든 데이터를 한 형식, Key-Value Pair 혹은 JSON document 등으로 저장하는 방식을 택한다. 따라서 테이블 JOIN이 필요없게 되었다. 대신 기존 관계형 테이블에서 무결성 제약(데이터 일관성)을 조금 포기하게 되었다.
새로운 컬럼을 추가하거나 삭제하는 등의 데이터 모델링에 제약이 적어졌으며 NoSQL 형식의 데이터를 분산 저장하는 방법이 획기적으로 개발되어 빅데이터와 같은 매우 거대한 양의 데이터를 관리하기 쉬워졌다.
NoSQL 종류
Model | Characteristics |
Document Store | JSON 형태로 저장되는 데이터 혹은 메타 데이터는 계층적 관계로 저장된다. |
Key Value Store | Key-Value 형식의 컬렉션으로 데이터가 저장된다. |
Wide-Column Store | 한 컬럼에서 값이 Key-Value Pair가 나타날 수 있는 데이터 형식이다. |
Graph Store | 노드와 엣지로 구성되는 그래프 형식 데이터이다. |
CAP 이론
CAP 이론 : 세 특성간의 trade-off 관계를 설명하는 특성이다.
- Consistency : 클러스터의 각 노드는 가장 최신의 데이터를 응답해야한다. 만약 모든 복제 노드들이 업데이트 중이라면 시스템은 요청을 대기시켜야한다. "Consistent System"에 쿼리를 요청하였다면, 항상 모든 복제 노드들이 최신 상태가 될 때 까지 기다려야할 수 있다. 그러나 항상 최신 데이터를 받는 것을 보장한다.
- Availabilty : 응답이 최신의 데이터를 나타내지 않더라도 각 노드는 즉각적인 응답을 받는다. "Available System"에 업데이트 중인 아이템에 대한 쿼리를 요청하면, 그 순간 가장 유용한 응답을 받게 된다.
- Partition Tolerance : 복제 노드가 실패하거나 다른 노드로의 연결이 끊어진다 하더라도 시스템이 계속 동작하게끔 보장하는 특성이다.
RDBMS의 경우 consistency와 availabilty에 강하지만 partition tolerance에는 약하다. 그들은 주로 단일 서버에 이용되고 수직적으로 스케일을 확장한다.
많은 RDBMS가 주 인스턴스를 보조 서버 인스턴스로 복제본을 만드는 내장된 복제 기능을 지원한다. 쓰기 작업은 주 인스턴스에 수행되고 각 보조 인스턴스에 복제된다. 장애시에는 주 인스턴스 대신 보조 인스턴스를 사용할 수 있도록 한다.
쓰기 작업은 항상 주 인스턴스에서 이루어지나 읽기 작업은 분산 시켜 보조 인스턴스를 통해 가능하도록 한다.
RDBMS에서 데이터 샤딩과 같이 여러 노드에 걸쳐 데이터를 수평으로 분할할 수도 있다. 하지만 샤딩은 서로 통신을 할 수 없는 많은 부분에 데이터를 분산시켜 운영 오버헤드를 증가시킨다. 테이블 조인, 트랜잭션 및 참조 무결성을 포함하는 관계형 기능을 사용하려면 분할된 배포에서 급격한 성능 저하가 발생한다.
복제 일관성과 복구 지점을 동기적/비동기적으로 구성하여 조정가능하다. 데이터 복제본이 매우 일관성 있는 혹은 동기 관계형 데이터베이스 클러스터에서 네트워크 연결을 잃게 되면 쓰기 작업이 불가능하게 된다. 시스템은 그러한 복제 작업을 쓰기 작업으로 간주하여 차단하기 때문이다. 트랜잭션이 완료되기전에 모든 복제 데이터는 업데이트되어야 한다.
NoSQL 데이터베이스는 보통 높은 가용성(Availabilty)과 분리 인내성(Partition Tolerance)를 지원한다. 상용 서버로 수평적으로 확장가능하다. 감소된 비용으로 지리적 한계를 넘어 높은 가용성을 제공한다. 데이터의 번복성이나 오류 오차를 허용하는 대신 데이터를 분산하고 복제하는 방법을 사용한다.
복제 데이터들이 높은 가용성의 NoSQL 데이터 베이스 클러스터에서 네트워크 연결을 잃으면, 당신은 여전히 데이터베이스에 대한 쓰기 작업을 수행할 수 있다. 데이터베이스 클러스터는 쓰기 작업과 복제 데이터를 업데이트하는 것을 가능하게 한다. 다중 복제 데이터 쓰기를 지원하는 NoSQL 데이터베이스는 복구 지점 최적화를 할 때 장애 조치가 필요하지 않으므로 고가용성을 확보한다.
최신 NoSQL 데이터베이스는 일반적으로 시스템 설계의 기능으로 파티셔닝 기능을 구현한다. 파티션 관리는 데이터 베이스에 내장되어 있으며 라우팅은 파티션 키라고하는 배치 힌트를 통해 이루어진다. 유연한 데이터 모델을 통해 NoSQL 데이터 베이스는 스키마 관리의 부담을 줄이고 데이터 모델 변경이 필요한 어플리케이션 업데이트를 배포할 때 가용성을 향상시킨다.
RDBMS 혹은 NoSQL 시스템 고려사항
NoSQL | RDBMS |
매우 큰 볼륨의 데이터에서 예측 가능한 응답시간을 요구해야할 때 | 적당한 볼륨의 데이터로 응답시간이 매우 엄격하지는 않음. |
데이터는 동적이며 자주 변경 | 데이터가 고도로 구조화되어 참조 무결성이 필요 |
관계는 비정규화된 데이터 모델일 수도 있음 | 정규화된 데이터 모델로 테이블 조인을 통해 표현 |
데이터 검색이 간단하고 테이블 조인 없이 표현 | 복잡한 쿼리 및 보고서 작업 |
데이터는 여러 직역에 복제되며 일관성, 가용성 및 성능에 대한 세부적인 제어가 필요 | 데이터는 중앙 집중식이거나 비동기식으로 영역을 복제 가능함 |
어플리케이션이 공개 클라우드로 배포된다. | 어플리케이션이 대규모 고급 하드웨어에 배포된다. |
참고:
https://docs.microsoft.com/en-us/dotnet/architecture/cloud-native/relational-vs-nosql-data
'DB > 이론' 카테고리의 다른 글
무결성 제약 조건 (0) | 2022.05.02 |
---|---|
트랜잭션 고립 수준에 따른 부정합 문제 (0) | 2022.05.01 |
내부 조인과 외부 조인 (0) | 2022.04.30 |
테이블 정규화 (0) | 2022.04.29 |
클러스터형 인덱스 / 보조 인덱스 (0) | 2021.11.29 |