DB
컴퓨터 시스템에 전자 방식으로 저장되어 있는 구조화된 정보 또는 데이터의 체계적인 집합을 말한다.
SQL
Structed Query Language
관계형 데이터베이스 관리시스템(RDBMS)의 관리를 위해 제작된 언어로써, 자료의 검색과 재조합, 스키마 생성과 수정과 같은 데이터베이스 객체 조정 관리를 위해 사용되고 있다.
DBMS
데이터베이스 관리 시스템으로 사용자와 데이터 사이에서 사용자의 요청에 의해 데이터의 생성 조회 등 데이터베이스를 관리해주는 역할을 한다.
RDBMS란?
Relational DataBase Management System의 약자로, 관계형 데이터베이스 관리 시스템을 의마한다.
RDB를 관리하는 시스템이며 RDB는 관계형 데이터 모델을 기초로 두고 모든 데이터를 2차원 테이블 형태로 표현하는 데이터베이스이다.
이러한 관계를 통해 테이블 간 join이 가능하다. 외래키(foreign key)라는 것을 사용한 테이블간에 join이 가능하다.
ACID(Atomicity, Consistency, Isolation, Durability)원칙을 기본으로 구성된 방식이다.
NoSQL
Not Only SQL의 약자로, 테이블 간 상호관계가 없는 것이 특징이다. 관계가 없으므로 다른 테이블과 join도 할 수 없다.
RDB 형태의 관계형 데이터베이스가 아닌 다른 형태의 데이터 저장기술이다. RDBMS와는 달리 테이블 간 관계를 정의하지 않는다.
빅데이터의 등장으로 인해 데이터와 트래픽이 기하 급수적으로 증가함에 따라 RDBMS에 단점인 성능을 향상시키기 위해 등장하였다.
데이터 일관성은 포기하되 비용을 고려하여 여러대의 데이터에 분산하여 저장하는 Scale-Out을 목표로 등장하였다.
1. Key-Value DB
Key-Value 방식으로 데이터를 저장한다. Key값은 모든 데이터 타입을 수용할 수 있고, 중복되지 않는 유니크한 값이며, 간단한 구조인 만큼 속도가 빠른 편이다. 뿐만아니라 간단한 API를 제공하는 만큼 질의의 속도도 굉장히 빠른 편이다. 대표적으로 Redis, AWS DynamoDB, Riak 등이 있다.
2. Document DB
key-Value에서 확장된 방식으로, Key-Document 형태로 저장된다. Document는 계층적인 데이터 타입(JSON,XML)으로 저장되는 장점이 있으며 JSON 타입을 사용하므로 HTTP 기반의 웹서버의 경우 데이터를 편리하게 주고받을 수 있다. 또한 객체지향에서의 객체와 유사하여 이들은 하나의 단위로 취급되어 저장된다. 다시 말해 하나의 객체를 여러 개의 테이블에 나눠 저장할 필요가 없어진다. 객체-관계 매핑이 필요하지않고 객체를 Document의 형태로 바로 저장 가능하다. 검색에 최적화되어 있다. 대표적으로 MongoDB, Couch DB 등이 있다.
3. Gragh DB
데이터를 Node와 Edge, Property와 함께 그래프 구조를 사용하여 데이터를 저장한다. 객체와 관계를 그래프 형태로 표현한 것으로 관계형 모델이라고 할 수 있으며, 데이터 간의 관계가 키일 경우에 적합하다. SNS Network Diagrams 등에 사용되고, SNS에서 함께 아는 친구 찾기, 추천 등 연관된 데이터를 추천해주는 엔진이나 패턴 기능에 사용된다. 대표적으로는 Neo4J가 있다.
4. Wide Column DataBase
Key, Value와 유사한 형태이다. 데이터가 내부에서 Key를 기준으로 오름차순으로 저장되는 특징이 있으며 Order by를 제공하지 않는 NoSQL에서 다양한 방법으로 활용할 수 있다는 장점이 있다. 이 모델은 키에서 필드를 결정한다. 키는 Row(키 값)와 Column-family, Column-name을 가진다. 연관된 데이터들은 같은 Column-family 안에 속해 있으며, 각자의 Column-name을 가진다. 관계형 모델로 설명을 하자면 어트리뷰트가 계층적인 구조를 가지고 있는 셈이다. 이렇게 저장된 데이터는 하나의 커다란 테이블로 표현이 가능하며, 질의는 Row, Colum-famliy, Coulmn-name을 통해 수행된다. 대표적으로 HBase, Hypertable등이 있다.
RDBMS와 NoSQL의 장단점
RDBMS
장점
- 정해진 스키마에 따라 데이터를 저장하여야 하므로 명확한 데이터 구조를 보장하고 있다.
- 관계는 각 데이터를 중복없이 한 번만 저장할 수 있다.
단점
- 테이블과 테이블 간 관계를 맺고 있어 시스템이 커질 경우 JOIN문이 많은 복잡한 쿼리가 만들어질 수 있다.
- 성능 향상을 위해서는 Scale-up만을 지원하며, 이로 인해 비용이 기하급수적으로 늘어날 수 있다.
- 스키마로 인해 데이터가 유연하지 못하다. 나중에 스키마가 변경 될 경우 번거롭고 어렵다.
NoSQL
장점
- 스키마가 없기 때문에 유연하며 자유로운 데이터 구조를 가질 수 있다.
- 언제든 저장된 데이터를 조정하고 새로운 필드를 추가할 수 있다.
- 데이터 분산이 용이하며 성능향상을 위한 Scale-up 뿐만이 아닌 Scale-out 또한 가능하다.
단점
- 데이터 중복이 발생할 수 있으며 중복된 데이터가 변경 될 경우 수정을 모든 컬렉션에서 수행을 해야 한다.
- 스키마가 존재하지 않기에 명확한 데이터 구조를 보장하지 않으며 데이터 구조 결정하기가 어려울 수 있다.
정리
RDBMS는 데이터 구조가 명확하며 변경 될 여지가 없으며 명확한 스키마가 중요한 경우 사용하는 것이 좋다. 또한 중복된 데이터가 없어(데이터 무결성) 변경이 용이하기 때문에 관계를 맺고 있는 데이터가 자주 변경이 이루어지는 시스템에 적합하다.
NoSQL은 정확한 데이터 구조를 알 수 없고 데이터가 변경/확장 될 수 있는 경우에 사용하는 것이 좋다. 또한 단점에서도 명확하듯이 데이터 중복이 발생할 수 있으며 중복된 데이터가 변경될 시에는 모든 컬렉션에서 수정을 해야한다. 이러한 특징들을 기반으로 Update가 많이 이루어지지 않는 시스템이 좋으며 또한 Scale-out이 가능하다는 장점을 활용해 막대한 데이터를 저장해야 해서 Database를 Scale-Out를 해야되는 시스템에 적합하다.
참고
https://khj93.tistory.com/entry/Database-RDBMS%EC%99%80-NOSQL-%EC%B0%A8%EC%9D%B4%EC%A0%90
https://universitytomorrow.com/26
https://pythontoomuchinformation.tistory.com/528
https://velog.io/@dat0802/RDBMS%EC%99%80-MySQL%EC%9D%98-%EC%B0%A8%EC%9D%B4
'Computer Science > DataBase' 카테고리의 다른 글
[DataBase] 정규화와 비정규화의 탄생 배경 및 장단점 (0) | 2023.04.17 |
---|---|
[DataBase] 정규화(1NF, 2NF, 3NF, BCNF) (0) | 2023.03.10 |