RDBMS
(= Relational Database Management System)
관계형 데이터 베이스는 엑셀의 형식과 유사하게 행(Row)과 열(Record)을 가지고 있는 2차원 테이블 형식이다.
RDBMS는 말 그래도 테이블끼리 관계를 가지고 있는데 일대일관계, 일다대관계, 다대다관계로 나눌 수 있으며 이러한 관계를 나타내기 위해 외래 키(foreign key)를 사용한다. 이 외래 키는 한 테이블의 키 중에서 다른 테이블의 행을 식별할수 있는 키를 의미한다.
sql언어를 사용해 저장, 수정, 삭제를 할 수 있으며, 대표적으로 mysql, oracle이 있다.
장점
- 명확한 구조를 가지고 있기 때문데 정보의 내용을 확인하기 쉽다.
- 데이터의 분류, 정렬 , 탐색 속도가 빠르다.
- 오랫동안 사용된 만큼 신뢰성이 높고, 데이터의 무결성을 보장한다. 이때 데이터의 무결성이란 데이터가 일관되고 얼마나 정확한지를 말한다.
단점
- 데이터가 많이 쌓였을 경우 기존에 작성된 스키마를 수정하기 어렵다.
- 관계를 많이 가지고 있을 경우 join문이 많은 복잡한 쿼리가 만들어질 수 있으며 이로 인해 쿼리 수정이 어려울 경우가 생길 수 있다.
- 데이터 모델링이 개발전에 완료되어야 하기때문에 개발 속도를 더디게 만들 수 있다.
NOSQL
(= Not Only Sql)
데이터의 형태가 복잡해지고, 용량이 커지면서 RDBMS의 방식에 한계를 느껴 이를 보완하기 위해 등장했다. 비관계형 데이터 베이스는 데이터 간의 관계를 정의하지 않기 때문에 key-value, document, graph 등 더 다양한 데이터 모델을 사용할수 있다. 같은 Nosql이라도 각각 특성이 다르다.
대표적으로 MongoDB, reids 가 있다.
장점
- 스키마가 정해져있지 않기 때문에 언제든지 저장한 데이터를 조정할 수 있다.
- RDBMS보다 더 큰 대용량 데이터 저장이 가능하다.
- RDBMS의 단점을 보완하기 위해 등장하였으므로 페타바이트급 대용량 데이터를 저장할 수 있다.
- 분산형 구조를 가지고 있다.
- 서버 1대에 저장하는 것이 아닌 여러 대의 서버에 분산해 저장하고 ,분산 시에 데이터를 서로 복제하기 때문에 서버 장애 발생 시 데이터 유실이나 서비스 중지가 없는 구조이다.
- 데이터 모델링이 완료되기 이전에도 테스트 데이터의 조회가 가능하다.
- 데이터 간의 관계를 정의하지않기 때문에 Join이 불가능하다.
단점
- 데이터베이스의 컬렉션이 다양할 경우, 수정할때의 모든 컬렉션의 데이터를 수정해야한다.
- 유연성때문에 데이터 구조 결정이 어려울 수 있다.
Nosql 데이터베이스별 특성
- Key-value Database
- key와 value가 쌍으로 데이터가 저장되는 형태이다.
- key는 중복이 없는 고유값으로 유지된다.
- 간단한 데이터 모델을 대상으로 데이터를 자주 읽고 쓰는 어플리케이션이 적합하다.
- ex) redis, Cassandra DB
- Document Database
- key-value database와 같이 key-value를 사용하나, 이 document database는 값을 문서로 저장한다. 여기서 문서는 JSON이나 XML을 말한다.
- 복잡한 데이터 구조 표현이 가능하므로 제품처럼 다양한 속성이 있는 데이터 관리에 적합하다.
- ex) mongoDB
- Graph Database
- node와 relationshop를 통해 데이터를 표현한다.
- 모든 노드는 끊기지 않고 연결되어 있어야 한다.
- sns, 교통망 등 연결 관계가 복잡한 데이터 형태를 다루는데 적합하다.
- ex) neo4j
따라서 이런 장단점을 바탕으로
RDBMS는 관계를 맺고있는 데이터가 자주 변경되지 않고, 명확한 스키마가 존재할때 사용하면 좋고, Nosql은 정확한 데이터 구조를 알 수 없거나 ,변경,확장될수 있는 가능성이 클 경우 Nosql을 사용하면 좋다.
'CS > 데이터베이스' 카테고리의 다른 글
mysql Index 종류 및 B-Tree 구조 (0) | 2023.06.14 |
---|---|
mysql 쿼리 최적화 (0) | 2023.06.14 |
Mysql JOIN (0) | 2023.02.20 |
데이터베이스 정규화(Normalization) (0) | 2023.02.20 |
redis의 특징과 자료구조 및 pub/sub (0) | 2023.02.16 |