- 관계형 데이터베이스(Relational Database)란 데이터가 중복되지 않도록 하여 테이블의 역할이 명확하게 구분하고 테이블 간에는 외래키(FK)를 사용하여 데이터를 공유하는 것으로 서로 관계를 맺도록 설계한 데이터 모델이다.
- 데이터의 중복이 허락되지 않기 때문에 Object 안에 Object를 넣을 수 없어 두 개의 테이블의 데이터를 조인해서 사용합니다.
- 2차원 데이터로 표현된다.
- 테이블 사이의 관계를 외래키로 나타낸다.
- ACID 성질을 갖는다.
- 유지관리 비용 / 사용 요금이 비쌉니다.
- 스키마 변경이 어렵다.
- RDB는 매우 정교한 초기 설계로 만들어집니다.
- 테이블 사이에 서로 의존성이 있기에 새로운 열을 추가한다던지 하는 작업은 실제 production 환경에서는 사실상 불가능합니다.
- 수직 확장(Vertical Scale) 가능하지만, 수평 확장(Horizontal Scale)이 어렵습니다.
- 일반적으로 수직 확장(Vertical Scale)은 하드웨어 스펙의 확장을 의미합니다.
- 수평 확장(Horizontal Scale)은 양적 확장을 의미합니다.
- RDB가 수직 확장이 더 용이하고 수평 확장이 어려운 이유는, 데이터가 여러 테이블에 의존해있기 때문입니다.
- 데이터가 서버에 분산될 경우 이를 중간에서 잘 중재해주는 역할이 중요해지는데, 그럴 바에는 그냥 좋은 서버를 하나 사서 분산 처리에 대한 신경을 쓰지 않는게 더 좋기 때문입니다.
- 보통 기존 테이블을 복제해서 거기에 수정을 가한 뒤, 기존 테이블과 교체하는 방식을 택합니다.
- Not Only SQL 의 약자로, 테이블 간 상호관계가 없는 것이 특징이다. 관계가 없으므로 다른 테이블과 join도 할 수 없다.
- RDB 형태의 관계형 데이터베이스가 아닌 다른 형태의 데이터 저장기술이다. RDBMS와는 달리 테이블 간 관계를 정의하지 않는다.
- 빅데이터의 등장으로 인해 데이터와 트래픽이 기하 급수적으로 증가함에 따라 RDBMS에 단점인 성능을 향상시키기 위해 등장하였다.
- 데이터 일관성은 포기하되 비용을 고려하여 여러대의 데이터에 분산하여 저장하는 Scale-Out을 목표로 등장하였다.
도큐먼트 모델
은 레코드 하나를 오브젝트(도큐먼트) 형식으로 표현하며, 자유로운 스키마 구조를 가지며, 자유롭게 작업하기 좋다. 대표적으로 몽고 DB가 있습니다.그래프 모델
은 데이터를 버텍스와 엣지로 그래프에 표현하는 방식이며, 데이터 사이의 유기적인 관계를 표현하기에 적합합니다. 대표적으로 아랑고 DB가 있습니다.키/값 모델
은 하나의 키에 값을 맵핑하는 해시 구조의 데이터 모델이며, 빠르게 데이터에 접근할 수 있는 장점이 있습니다. 대표적으로 redis가 있습니다.와이드 컬럼 모델
은 테이블 형태를 가지며, 행마다 갖는 컬럼의 형태가 고정되어 있지 않은 데이터 모델이라고 합니다.
- 다양한 방식으로 데이터를 표현합니다.
- 테이블 사이에 딱히 명시된 제약이나 규칙이 없습니다.
- 스키마가 고정적이지 않고, 매우 유연합니다.
- 수평적 확장(Horizontal Scale)이 쉽습니다.
- 코스트가 저렴하고 오픈소스도 많습니다.
- 연산이 빠르고 빅데이터 & 실시간 연산에 적합합니다.
- 데이터 중복 발생 가능
- 데이터 변경 시 중복 데이터로 인해 모든 컬렉션에서 수정이 필요할 수 있습니다.