- 정해진 스키마에 따라 데이터를 테이블에 저장하는 데이터베이스
- 데이터 구조를 보장하고 중복을 피할 수 있다.
- SQL를 사용하여 데이터 저장, 수정, 삭제 및 검색이 가능하다.
- 데이터는 관계를 통해 여러 테이블에 분산된다.
- 수직적 확장이 용이하지만, 수평적 확장은 어렵다.
- 스키마 변경이 어렵다.
- 장점
- 정해진 스키마에 따라 데이터를 저장하여, 명확한 데이터 구조를 보장
- 각 데이터를 중복없이 저장
- 단점
- 테이블 간 관계를 맺고 있어, 복잡한 시스템일수록 JOIN문을 많이 사용해 성능이 저하된다.
- 성능 향상을 위해 수직적 확장만 용이하다. 이로 인해 비용이 기하급수적으로 증가
- 스키마로 인해 데이터가 유연하지 못해, 스키마가 변경되기 번거롭고 어렵다.
- 스키마가 없거나 느슨한 스키마로 데이터 간의 관계없이 자유로운 형태로 데이터를 저장하는 데이터베이스
- 관계형 데이터 모델을 지양
- 스키마 없이 사용 가능하며, 느슨한 스키마를 제공
- 대량의 분산된 데이터를 저장하고 조회하는 데 특화
- 종류마다 쓰기/읽기 성능 특화, 2차 인덱스 지원, 오토 샤딩 지원, 동적인 스케일 아웃 지원, 가용성을 위한 데이터 복제 등 제공
- 장점
- 유연한 스키마를 가지므로, 요구 사항이 변경되었을 때 데이터베이스를 쉽게 변경할 수 있다.
- 수평적 확장이 자유롭다.
- 쿼리에 최적화되어 저장된다.
- RDB 경우에는 여러 테이블를 join 해야 한다.
- 단점
- 데이터 업데이트 중 장애가 발생하면 데이터 손실 발생 가능
- 많은 인덱스를 사용하려면 충분한 메모리가 필요. 인덱스 구조가 메모리에 저장
- 스키마가 존재하지 않기에 명확한 데이터 구조를 보장하지 않아 데이터 구조를 결정하기 힘들 수 있다.
- 데이터 일관성이 항상 보장되지 않다.
- 데이터 중복이 발생하여 중복된 데이터가 변경될 경우 모든 컬렉션에 대해서 수정을 수행해야 한다.
- Key-Value Model
- 키 하나로 데이터 하나를 저장하고 조회할 수 있는 단일 키-값 구조
- 단순한 저장 구조로 복잡한 조회 연산은 지원 X
- 고속 읽기와 쓰기에 최적화되어 있다.
- (활용 예시) 사용자의 프로필 정보, 웹 서버 클러스터를 위한 세션 정보, 장바구니 정보, URL 단축 정보 저장 등
- 성능 향상을 위해 데이터베이스 데이터 캐싱
- Redis, AWS DynamoDB
- Document Model
- 키-값 모델을 개념적으로 확장한 구조로 하나의 키에 하나의 구조화된 문서를 저장하고 조회
- 키는 문서에 대한 ID 로 표현, 저장된 문서를 컬렉션으로 관리하며 문서 저장과 동시에 문서 ID 에 대한 인덱스를 생성 → 문서 ID 에 대한 인덱스를 사용하여 O(1) 시간 안에 문서를 조회할 수 있다.
- 문서 모델 NoSQL 은 B 트리 인덱스를 사용하여 2 차 인덱스를 생성
- (활용 예시) 중앙 집중식 로그 저장, 타임라인 저장, 통계 정보 저장 등
- MongoDB
- Column Family Database
- 하나의 키에 여러 개의 컬럼 이름과 컬럼 값의 쌍으로 이루어진 데이터를 저장하고 조회
- 모든 컬럼은 항상 타임 스탬프 값과 함께 저장
- (활용 예시) 채팅 내용 저장, 실시간 분석을 위한 데이터 저장소 등의 서비스 구현에 적합