이번 방학의 목표 중 하나인 Mongo DB 사용법 알기와 Express 와 Mongo DB 를 연결할 수 있는 Mongoose 사용하기를 하기 전에 이전에 기록해둔 Database 의 차이를 포스팅으로 남겨야겠다는 필요를 느꼈다. 그래서 SQL 과 NoSQL 의 차이를 통해 Database (DBMS) 를 비교하고자 한다.
Database: 여러 사람에 의해 공유되어 사용될 목적으로 통합하여 관리되는 데이터의 집합, 자료항목의 중복을 없애고 자료를 구조화 하여 저장함으로써 자료 검색과 갱신의 효율을 높임
식별자의 특징
1. 유일성 : 하나의 릴레이션에서 모든 행은 서로 다른 키 값을 가진다
2. 최소성 : 꼭 필요한 최소한의 속성들로만 키를 구성
SQL은 Structed Query Language의 약자. 관계형 DB (RDS, Relational Database)
Scale-UP의 형태 (관계를 가지는 테이블들이 수평적으로 더 커짐, 굉장히 덩치가 큰 DB 시스템이 되어 관리하기 어려워짐.)
구조의 완전성 보장, 엄격한 스키마
Non SQL or Not only SQL, Non-relational database. 관계형 테이블로 이루어진 SQL과 달리 데이터 저장을 위한 메커니즘이 다름. Unstructured 된 방대한 데이터를 저장하기에 좋음.
Scale-Out의 형태 (고성능 DB가 아니라 여러 DB 시스템으로 추가), 유연한 Schema 구조
RDB - Relational Database (관계형 데이터베이스)
MSSQL, MYSQL 보다 대량의 데이터를 처리하기 좋음.
대기업 주로 사용하고, 글로벌 DB 시장 점유율 1위
비공개 소스
오픈소스로 이루어진 무료 프로그램 (상업적 사용 시 비용있음)
다수의 중소기업에서 사용 중
마이크로소프트에서 개발한 상업용 데이터베이스
윈도우에 특화
비공개 소스로 폐쇄적인 정책 (리눅스 버전은 오픈 소스)
중소기업 주로 사용
이외에도 MariaDB 등 여러 RDB 들이 존재한다.
NoSQL: 최근 빅데이터가 중요해지면서 데이터베이스의 속도가 중요해 점차 No-SQL의 중요성 올라가는 중이다.
DOCUMENT STORE 또는 DOCUMENT DATABASE: 테이블의 스키마가 유동적, 즉 레코드마다 각각 다른 스키마를 가질 수 있다. 보통 XML, JSON과 같은 DOCUMENT를 이용해 레코드를 저장한다. 트리형 구조로 레코드를 저장하거나 검색하는 데 효과적이다.
Ex) MongoDB, CouchDB 등
WIDE COLUMN STORE 또는 WIDE COLUMN DATABASE: 행마다 키와 해당 값을 저장할 때마다 각각 다른 값의 다른 수의 스키마를 가질 수 있다. Key에 해당하는 값에 스키마들이 각각 다를 수 있음.
Column Family 데이터 모델 사용
Ex) Cassandra, HBase!
KEY-VALUE STORE 또는 KEY-VALUE DATABASE: 기본적인 패턴으로 KEY-VALUE 하나의 묶음(Unique)으로 저장되는 구조로 단순한 구조이기에 속도가 빠르며 분산 저장 시 용이하다. 주로 SERVER CONFIG, SESSION CLUSTERING등에 사용되고 엑세스 속도는 빠르지만, SCAN에는 용이하지 않다.
Ex) Redis, Oracle NoSQL Database
GRAPH DATABASE: 데이터를 노드로(그림4에서 파란, 녹색 원) 표현하며 노드 사이의 관계를 엣지(그림4에서 화살표)로 표현, RDBMS 보다 Performance가 좋고 유연하며 유지보수에 용이한 것이 특징. Social networks, Network diagrams 등에 사용할 수 있다.
Ex) Neo4j, Blazegraph
이상으로 데이터베이스의 특징들을 정리해보았다. Database 를 안다하는 사람들은 SQL / NoSQL 이런식으로 분류된 Database 를 상황에 따라 같이 사용하고, 서비스 별로 관리를 해야할 수도 있다고 한다. 매 프로젝트에서 어떤 Database 를 써야 데이터의 효율적인 관리가 쉬워질지 고민해봐야할 것 같다.
출처: 다양한 Database 공식 홈페이지