# NoSQL
Not Only SQL, 유여한 데이터 모델을 갖춘 고성능 비관계형 데이터베이스
NoSQL
데이터베이스는 특정 데이터 모델에 대해 특정 목적
에 맞추어 구축되는 데이터베이스로서 현대적인 애플리케이션 구축을 위한 유연한 스키마를 갖추고 있다.
# NoSQL 데이터베이스의 작동 방식
NoSQL 데이터베이스는 데이터의 액세스 및 관리를 위해서 다양한 데이터 모델을 사용한다. 큰 데이터 볼륨
과 짧은 지연 시간
, 유연한 데이터 모델
이 필요한 애플리케이션에 최적화되어 사용할 수 있다.
# NoSQL 데이터베이스를 사용해야 하는 이유
NoSQL 데이터베이스는 탁우러한 사용자 경험을 제공하기 위하여 유연성과 확장성을 비롯해 고성능의 매우 기능적인 데이터베이스를 필요로 하는 모바일, 웹이나 게이밍과 같은 다양한 현대적인 애플리케이션에 적합하다.
유연성
: NoSQL 데이터베이스는 일반적으로 유연한 스키마를 제공하여 보다 빠르고 반복적인 개발을 가능하게 해준다.확장성
: NoSQL 데이터베이스는 일반적으로 고가의 강력한 서버를 추가하는 대신 분산형 하드웨어 클러스터를 이용해 확장하도록 설계되어있다.고성능
: NoSQL 데이터베이스는 특정 데이터 모델 및 액세스 패턴에 대해 최적화되어 관계형 데이터베이스를 통해 유사한 기능을 충족하려 할 때 뛰어난 성능을 얻게 해준다.고기능성
: NoSQL 데이터베이스는 각 데이터 모델에 맞춰 특별히 구축된 뒤어난 기능의 API와 데이터 유형을 제공한다.
# NoSQL 데이터베이스 유형
# key value
- key, value 데이터베이스는 분할성이 커서 다른 유형의 데이터베이스로는 불가능한 범위까지 수평 확장을 가능하게 한다.
- key는 unique한 값으로 유지된다.
- 테이블간 조인을 고려하지 않는다.
- 값에 모든 데이터 타입을 허용한다. 데이터 입력 부분에서 추가적인 검증 로직이 요구된다.
- 보통 간단한 데이터 모델을 대상으로 데이터를 자주 읽고 쓰는 애플리케이션에 적합하다. 값은 단순한 기본 자료형이 일반적이지만 리스트나 JSON같이 구조화된 값도 가능하다.
- 주로 성능 향상을 위한 캐싱 및 이미지나 오디오 파일 같은 대용량 객체 저장에 사용된다.
- ex) Redis, Riak, Oracle Berkely, Amazon DynamoDB
# Document Database
- 데이터 저장에 Key value type을 사용한다.
- 값을 문서로 저장한다. 보통 JSON이나 XML과 같은 형태로 저장된다.
- 값을 저장하기 전에 schema를 별도로 정의하지 않으며, 문서를 추가하면 그것이 바로 schema이다.
- 각 문서별로 다른 필드를 가질 수 있다. 데이터 입력 부분에서 컬럼과 필드의 관리가 필요하다.
- 대용량 데이터를 읽고 쓰는 웹 사이트용 백엔드 지원, 제품처럼 다양한 속성이 있는 데이터 관리, JSON 데이터 구조를 사용하는 애플리케이션, 비졍규화된 중첩 구조의 데이터를 사용하는 목적에 적합하다.
- ex) MongoDB, CouchDB, Couchbase
# Column Family Database
- 대용량 데이터, 읽기와 쓰기 성능, 고가용성을 위해 설계되었다.
- Column과 Row와 같이 RDB와 동일한 용어를 사용하여 스키마를 정의한다.
- 컬럼 수가 많다면 관련된 컬럼들을 컬렉션으로 묶을 수 있다. 이렇게 묶은 컬럼을 Column Family라고 한다.
- 정의된 스키마를 사용하지 않는다. 데이터를 입력하는 시점에 원하는대로 컬럼을 추가할 수 있다.
- 테이블간 조인을 지원하지 않는다.
- 일반적으로 비정규화되어 있다. 한 객체에 관련된 모든 정보를 가능한 매우 너비가 넓은 단일 Row에 넣어서 보관한다.
- 데이터베이스에 쓰기 작업이 많은 애플리케이션, 지리적으로 여러 데이터 센터에 분산되어 있는 애플리케이션, 복제본 데이터가 단기적으로 불일치하더라도 큰 문제가 없는 애플리케이션, 동적 필드를 처리하는 애플리케이션, 수백만 테라바이트 정도의 대용량 데이터를 처리할 수 있는 애플리케이션에 적합하다.
- ex) Hbase, Cassandra, GCP BigTable, Microsoft Azure Cosmos DB
# SQL (관계형) vs. NoSQL(비관계형) 데이터베이스 비교
관계형 데이터베이스 | NoSQL 데이터베이스 | |
---|---|---|
최적의 워크로드 | 관계형 데이터베이스는 일관성이 뛰어난 온라인 트랜잭션 프로세싱 애플리케이션을 위해 설계되어 온라인 분석 프로세싱에 적합하다. | NoSQL 데이터베이스는 낮은 지연 시간의 애플리케이션을 포함한 수 많은 데이터 액세스 패턴에 맞도록 설계되었다. NoSQL 검색 데이터베이스는 반정형 데이터에서 분석을 위해 설계 되었다. |
데이터 모델 | 관계형 모델은 데이터를 행과 열로 구성된 테이블로 정규화한다. 스키마는 테이블, 행, 열, 인덱스, 테이블 간 관계, 기타 데이터베이스 요소를 정확하게 규정한다. 데이터베이스는 테이블 사이의 관계에서 참조 무결성을 실현한다. | NoSQL 데이터베이스는 키-값, 문서, 그래프 등 성능과 규모 확장에 최적화된 다양한 데이터 모델을 제공한다. |
ACID 속성 | 관계형 데이터베이스는 원자성, 일관성, 격리성, 지속성의 속성을 제공한다. | NoSQL 데이터베이스는 흔히 수평으로 확장할 수 있는 보다 유연한 데이터 모델을 위해 관계형 데이터베이스의 일부 ACID 속성을 완화함으로써 조정한다. 이로써 NoSQL 데이터 베이스는 단일 인스턴스의 한계를 넘어 수평으로 확장해야 하는 사용 사례에서 높은 처리량, 낮은 지연 시간을 위한 탁월한 선택이 된다. |
성능 | 성능은 일반적으로 디스크 하위 시스템에 따라 다르다. 최고 성능을 달성하기 위해서는 쿼리, 인덱스 및 테이블 구조를 자주 최적화해야 한다. | 성능은 일반적으로 기본 하드웨어 클러스터 크기, 네트워크 지연 시간 및 호출 애플리케이션 기능이다. |
확장 | 관계형 데이터베이스는 일반적으로 하드웨어의 계산 성능을 높이거나 읽기 전용 워크로드의 복제물을 추가함으로써 확장된다. | NoSQL 데이터베이스는 일반적으로 거의 무제한적인 범위에서 일관된 성능을 제공하는 처리량 제고를 위해 분산형 아키텍처를 사용해 액세스 패턴이 확장 가능하기 때문에 분할성이 있다. |
API | 데이터를 저장 및 검색하기 위한 요청은 SQL을 준수하는 쿼리를 사용하여 전달된다. 쿼리는 관계형 데이터베이스에 의해 구문 분석되고 실행된다. | 객체 기반 API를 통해 앱 개발자가 데이터 구조를 쉽게 저장 및 검색할 수 있다. 파티션 키를 사용하면 앱에서 키-값 페어, 열 세트 또는 일련의 앱 객체 및 속성을 포함하는 반정형 문서를 검색할 수 있다. |
# References
NoSQL이란? (opens new window)
[NoSQL 데이터베이스별 특징] (opens new window)