(이 문서의 RDBMS와 NoSQL은 각각 MySQL, MongoDB을 중심으로 작성되었습니다.)
RDBMS
Relational Database Management System
- 종류는 MySQL, OracleDB, PostgreSQL, MariaDB, SQLite 등이 있다.
(MySQL 기준으로 살펴보자)
- 관계 데이터 모델을 기반으로 한다.
- row(tuple) 및 column(attribute)으로 구성된 table(relation) 형태이며,
각 테이블 내 튜플은 속성에 따라 정해진 type의 value를 갖는다.
- 각 테이블은 서로 간에 관계를 가질 수 있으며, 외래키를 사용해 Join 연산 등을 하곤 한다.
- SQL을 사용한다.
- 정의해둔 스키마에 따라 데이터가 저장되어 무결성을 지킨다는 점에서 안정적이다.
- 테이블 내에 중복되는 튜플이 존재할 수 없다.
- 데이터의 값을 변경 할 때에도 안정적으로 변경이 가능하다.
- 스키마를 변경하게 될 시에는 관계되는 번거로운 작업이 발생할 수 있으며,
이로 인해 데이터를 유연하게 저장할 순 없는 구조이다.
NoSQL
Not Only SQL
- 종류는 MongoDB, Redis 등이 있다.
(MongoDB 기준으로 살펴보자)
- Big data의 등장으로 인해 감당해야 할 데이터와 트래픽이 증가했고
기존의 관계 데이터 모델의 속도가 느린 이슈를
현실적으로 Scale-Up만으로 극복하는 데에는 한계가 있기 때문에
Scale-Out을 용이하게 하기 위한 대체제로써 주로 사용한다.
- 분산 컴퓨팅으로써 복제와 샤딩 기법을 사용한다.
- RDBMS 사용을 통한 안정성을 누리는 것 보단,
확장성과 최적화를 통한 성능 개선을 꾀하고자 할 때 쓰인다.
- document 모델을 기반으로 한다.
- 각 데이터는 document로써 테이블이 아닌 컬렉션에 저장되고,
id값이 key로써 식별 되며 BSON 형식이다.
- document는 {속성: 값}의 형태로, 제각기 자유로운 형식으로 데이터를 저장할 수 있다.
- 속성(field)은 반드시 문자열이며, 값(value)으로는 각종 type이 쓰일 수 있다.
- 점 표기법을 이용해서 계층적으로 document 내부 데이터에 접근할 수 있다.
- JSON 형식과 유사한 BSON 형식으로 데이터를 저장하기 때문에,
JS문법을 사용하는 등 JS와의 호환성이 좋다.
- 이 밖에, key-value 모델 (Redis 등) 등도 있다.
- 비 정형화된 데이터의 저장을 필요로 하는 곳에 주로 쓰인다.
- 정해진 스키마 없이 데이터를 저장하므로 데이터 자체의 저장과 변경은 유연하다.
- UPDATE연산은 RDBMS에 비해 비교적 느리다.
- 사용하기에 따라 중복되는 데이터가 발생할 수 있는 문제가 있다.
- 복잡한 쿼리를 빈번하게 필요로 할 때는 RDBMS에 비해 비교적 성능이 떨어질 수 있다.