[Database] NoSQL

Jay Lee·2022년 11월 12일
0

database

목록 보기
4/6

RDBMS vs NoSQL

RDBMS (관계형 데이터베이스 MS)

RDBMS란 관계형 데이터베이스 관리 시스템을 의미합니다. Relation이란 행과 열로 구성된 테이블을 말하여, 데이터의 집합을 의미한다. 즉, RDBMS는 데이터들을 행과 열로 구성된 테이블 형태로 구조화하여 저장하며, 테이블 간의 상호작용을 Relationship으로 나타내는 데이터베이스 시스템이다.
튜플과 속성으로 구성되어 있으며 모든 튜플은 속성들로 이루어진 릴레이션 스키마를 만족하여야 한다. 또한 기본 및 외래키 제약조건으로 관계를 정의한다.

NoSQL (Not Only SQL)

NoSQL이란 Not Only SQL의 약자로써 스키마를 갖는 테이블 형태가 아닌 Documents 형식이나 Key-Value 형태로 데이터가 저장된다. 하나의 Entity에 대한 정보가 하나의 데이터에 모두 저장되어 있기 때문에 대량의 분산된 데이터를 저장하고 조회하는 데 특화 되어있다.

장점

  1. 자유로운 데이터 구조
  2. 데이터의 조회나 삽입 시 속도가 더 빠르다.
  3. 데이터 분산이 용이하며 성능 향상을 위한 Scale-out 이 가능

단점

  1. 데이터 중복이 발생할 수 있으며 중복된 데이터가 변경될 경우 모든 컬렉션에서 수행해야함
  2. 스키마가 존재하지 않으므로 명확한 데이터 구조를 보장받지 못함

NoSQL의 분류

NoSQL에는 저장 방식에 따라 Key-Value 모델, Document Model, Column-Family model 등으로 분류할 수 있다.

1. Key-Value Model

가장 기본적인 형태의 NoSQL이며 키 하나로 데이터 하나를 저장하고 조회할 수 있는 단일 Key-Value 구조를 가지는 데이터베이스이다. 단순한 저장 구조를 가지고 있기 때문에 데이터의 저장 및 조회가 빠른 반면 복잡한 조회 연산(JOIN 등)을 지원하지 않지 않는다. 사용자의 프로필 정보, URL 단축 정보 저장 등에 사용한다.
하나의 서비스 요청에 다수의 데이터 조회 연산이 발생하면 트랜잭션 처리가 불가능하여 데이터 정합성 보장이 어렵다.

ex) Redis

2. Document Model

키-값 모델을 개념적으로 확장한 구조로 하나의 키에 하나의 계층적 트리 형태로 구조화(XML or JSON 형태 등)된 문서를 저장하고 조회한다. Key값은 문서에 대한 ID로써의 역할을 수행한다. Documents-Collection 구조를 가지고 동일한 범주의 Documents들을 하나의 Collection으로 모아서 관리하며 문서의 저장과 동시에 문서 ID에 대한 Index를 생성하고 이를 통해 O(1)의 시간 안에 문서를 조회할 수 있다.

대부분의 문서 모델 NoSQL은 b tree 인덱스를 사용하여 2차 인덱스를 생성한다. b-tree 인덱스의 경우 조회 성능은 좋지만 데이터 양이 많아질 경우 데이터의 삽입 및 삭제 성능이 저하되기 때문에 조회가 자주 일어날 때 성능이 좋다.
중앙 집중식 로그 저장, 타임라인 저장, 통계 정보 저장 등에 사용된다.

ex) MongoDB

3. Column-Family Model

하나의 키에 여러개의 컬럼 이름과 컬럼 값의 쌍으로 이루어진 데이터를 저장하며, 모든 컬럼은 항상 timestamp 값과 함께 저장된다.
저장의 기본 단위는 컬럼으로 컬럼은 컬럼 이름과 컬럼 값, 타임 스탬프로 구성된다. 이러한 컬럼들의 집합이 로우(Row)이몀 Row key는 각 로우를 식별하기위한 식별자이다. Row들의 집합 (RDB 에서 Table의 역할)은 Key Space라고 한다.

대부분의 Column-Fmaily model NoSQL은 쓰기와 읽기 중에 쓰기에 더 특화되어 있다. 데이터를 먼저 커밋로그와 메모리에 저장한 후 응답하기 때문에 빠른 응답속도를 제공한다. 그렇기 때문에 읽기 연산 대비 쓰기 연산이 많은 서비스나 빠른 시간 안에 대량의 데이터를 입력하고 조회하는 서비스를 구현할 때 가장 좋은 성능을 보인다. 채팅 내용 저장, 실시간 분석을 위한 데이터 저장소 등의 서비스 구현에 적합하다.

ex) HBase, Cassandra

profile
Data Engineer

0개의 댓글