차이를 배우기 전에 DB의 간단한 정의를 알아보자
database의 약자로 우리가 사용하는 정보는 db에 저장하지 않고 연결이 끊어지면 휘발성으로 인해 사라진다. 그러므로 db에 저장하여 다른 사람들과 정보를 공유하기 위해 만들어진 공간이다.
사전적 용어로 말하자면, 컴퓨터 시스템에 전자 방식으로 저장되어 있는 구조화된 정보 또는 데이터의 체계적인 집합을 말한다.
Relational DataBase Management System의 약자로, 관계형 데이터베이스 관리 시스템을 의미한다.
데이터 테이블 간의 정보가 서로 관계성을 가지고 있는 것이 특징이고, 2차원의 행(row) 렬(column)로 테이블을 표현하는 데이터 베이스이다. 이러한 관계를 통해 테이블 간 join이 가능하다.
ACID(Atomicity, Consistency, Isolation, Durability) 원칙을 기본으로 구성된 방식이다.
Not Only SQL의 약자로, 테이블 간 상호관계가 없는 것이 특징이다. 관계가 없으므로 다른 테이블과 join도 할 수 없다.
RDBMS의 복잡성과 용량의 한계를 극복하기 위해 등장했다. RDBMS와 다르게 스키마가 존재하지 않아 자유롭게 데이터를 저장할 수 있다.
NoSQL하면 일반적으로 MongoDB를 떠올리지만, NoSQL 방식 중 하나인 Document방식이다. 아래와 같은 여러 방식도 지원하고 있으니 알아보자.
1. Key-Value DB
Key-Value 방식으로 데이터를 저장
Key값은 모든 데이터 타입을 수용할 수 있고, 중복되지 않는 유니크한 값
간단한 구조인 만큼 속도가 빠른 편이다.
대표적으로 Redis, AWS DynamoDB, Riak 등이 있다.
2. Document DB
Key-Value에서 확장된 방식으로, Key-Document 형태로 저장된다.
Document는 계층적인 데이터 타입(JSON, XML)으로 저장되는 장점이 있다.
JSON 타입을 사용하므로 HTTP 기반의 웹서버의 경우 데이터를 편리하게 주고받을 수 있다.
대표적으로 MongoDB, Couch DB 등이 있다.
3. Gragh DB
데이터를 Node와 Edge, Property와 함께 그래프 구조를 사용하여 데이터를 저장한다.
객체와 관계를 그래프 형태로 표현한 것으로 관계형모델이라고 할 수 있으며, 데이터 간의 관계가 키일 경우에 적합하다.
SNS, Network Diagrams 등에 사용되고, SNS에서 함께 아는 친구 찾기, 추천 등 연관된 데이터를 추천해주는 엔진이나 패턴 기능에 사용된다.
대표적으로 Neo4j가 있다.
4. Column DB
Key, Value와 유사한 형태이다. 데이터가 내부에서 Key를 기준으로 오름차순 저장되는 차이점이 있다. Order by를 제공하지 않는 NoSQL에서 다양한 방법으로 활용할 수 있다는 장점이 있다.
이전의 모델들이 key-value 값을 이용해 필드를 결정했다면, 특이하게도 이 모델은 키에서 필드를 결정한다. 키는 Row(key값)와 Column-family, Column-name을 가진다. 연관된 데이터들은 같은 Column-family 안에 속해 있으며, 각자의 Column-name을 가진다. 관계형 모델로 설명하자면 어트리뷰트가 계층적인 구조를 가지고 있는 셈이다. 이렇게 저장된 데이터는 하나의 커다란 테이블로 표현이 가능하며, 질의는 Row, Column-family, Column-name을 통해 수행된다.
정리 원본
대표적으로 HBase, Hypertable이 있다.
장점
정해진 스키마에 따라 데이터를 저장해야 하므로 명확한 데이터 구조를 보장받을 수 있다.
각 테이블 간의 관계를 정의해야 하므로, 데이터의 중복이 발생하지 않는다.
단점
테이블 간 관계가 정의되어 있으므로, 시스템이 커질 경우, JOIN문이 많은 복잡한 쿼리가 만들어질 수 있다.
성능 향상의 방법으로 Scale-up만을 지원하므로, 처리 비용이 크다.
정해진 스키마로 인해 데이터가 유연하지 못하다. 스키마가 변경될 경우 번거롭기 때문에, 스키마가 자주 바뀌지 않는 서비스에 사용한다.
장점
스키마가 없기 때문에 데이터 구조가 유연하고, 자유롭게 필드를 추가할 수 있다.
성능 향상의 방법으로 Scale-up / Scale-out 모두 사용 가능하다.
단점
스키마가 존재하지 않아서, 데이터의 일관성이 존재하지 않는다.
데이터 중복이 발생할 수 있으며, 이 데이터가 변경될 경우 모든 컬렉션에서 update해야 하는 번거로움이 있다.
[참조]