RDBMS와 NoSQL
1. RDBMS, 관계형 데이터베이스
말 그대로 관계형
데이터베이스 관리 시스템입니다.
정해져있는 데이터 스키마에 따라 데이터베이스 테이블에 저장되며,
관계를 통한 테이블간 연결을 통해 사용됩니다.
이 때문에 RDBMS는 데이터 관리를 효율적으로 하기위해 구조화
가 굉장히 중요합니다.
데이터의 완전성이 무엇보다 중요한 상황에 사용시 적합합니다.
ex) SNS 와 같이 User, Feed, Comment 등 다양한 데이터가 있고 그 관계가 있을때
1) 장점
- 다양한 용도로 사용 가능하고, 일반적으로 높은 성능을 보여준다(범용적 / 고성능)
- 데이터의 일관성을 보증한다
- 정규화에 따른 갱신비용 최소화
- SQL(Structured Query Language) 지원
-> 데이터를 유연하게 Query 가능
2) 단점
- Oracle 같은 시스템을 사용하게 될 경우 비용적으로 부담이 될 수 있음
- 시스템 복잡도를 고려하여 구조화
-> 시스템이 복잡해 질수록 Query문이 복잡해지고 성능이 저하
- 갱신이 발생한 테이블의 인덱스 생성 및 스키마 변경
- 수평적확장이 어려움, 컬럼 확장의 어려움
3) 주요 제품
- Oracle / Oracle
- MySQL / Oracle
- MS-SQL Server / Microsoft
- SQLite / Opensource
2. NoSQL, 비관계형 데이터베이스
관계형 데이터베이스와 반대되는 방식으로 데이터베이스를 관리합니다.
데이터 간의 관계
를 정의하지 않기 때문에 자유롭게 데이터를 관리할 수 있습니다.
RDBMS의 테이블
과 같은 개념으로 컬렉션
이라는 형태로 데이터를 관리합니다.
주로 비정형 데이터 작업이 많은 경우, 자주 접근하지만 자주 업데이트 되지 않는 데이터에 적합하다.
데이터의 저장 및 검색에 특화된 메커니즘을 제공하며 응답속도나 처리효율이 뛰어나다.
1) 장점
- 대용량 데이터 저장 가능
- 분산형 구조를 가짐
-> 데이터를 여러 대의 서버에 분산해 저장하고, 분산 시에 데이터를 상호 복제해서 특정 서버에 장애가 발생했을 때에도 데이터 유실이나 서비스 중지가 없는 형태의 구조를 갖는다.
- 유연한 데이터 모델링
-> 복잡한 테이블간의 관계를 형성하는 형태의 구조를 신경쓰지 않아도 됨
-> 복잡한 SQL구문이 불필요함
- 수평적 확장이 쉽다
2) 단점
- 컬렉션에 중복된 데이터가 저장 가능
-> 데이터 업데이트 시 중복 데이터를 관리해주어야 함
- 컬럼 확장의 어려움
- 단순히 빠른 결과
3) 주요 제품
- key / value
- 휘발성 / 영속성 (Memchached, Tokyo Tyrant, Flare, Roma, Redis)
- Document
- 스키마 정의 없음 (MongoDB, CouchDB)
- Big Table(Column 형)DB
- 뛰어난 확장성, 검색에 유리 (Hbase, Casandara, Hypertable)