SQL
- Structed Query Language 구조화된 질의 언어
- RDBMS에서 데이터를 저장, 조작, 검색하는데 사용되는 쿼리 언어
대표 RDBMS (RDB Management System) 관계형 데이터베이스 관리 시스템
- MySQL
- Oracle
- SQLite
- MariaDB
- PostgresSQL
Relational Database (RDB) 관계형 데이터베이스
- 데이터베이스의 한 유형
- RDB를 SQL이라고도 부른다.
- RDB는 모두 RDBMS를 위해 만들어진 SQL이라는 언어를 사용하기 때문
- RDBMS 솔루션까지 묶여서 RDB라고도 한다.
특징
- 데이터는 엄격한 데이터 스키마(structure)를 따라 테이블에 저장된다.
- 구조화된 데이터의 모음 → 구조화된 쿼리 언어 사용
- 데이터는 관계를 통해서 연결된 여러 개의 테이블에 분산된다.
1. 엄격한 스키마
- 각 테이블(table)에는 명확하게 정의된 구조(structure)가 있고, 데이터는 테이블에 레코드(record)로 저장된다.
- 스키마에 맞지 않은 형태의 레코드는 추가할 수 없다.
2. 관계
- 데이터를 여러 테이블에 나누어서 중복을 피할 수 있다.
- 한 테이블에서 하나의 데이터만을 관리하기 때문에 다른 테이블에서 부정확한 데이터를 다룰 위험이 없다.
사용성
- 관계를 맺고 있는 데이터가 자주 변경되는 어플리케이션
- 변경될 여지가 없고 명확한 스키마가 사용자와 데이터에게 중요한 경우
NoSQL
비관계형 데이터베이스
- 관계형 데이터베이스 이외의 형식으로 데이터를 저장하는 데이터베이스
- 비관계형 데이터베이스를 NoSQL 혹은 NoSQL 데이터베이스라고 한다.
용어
- 문서(document) ↔ 레코드(record)
- 컬렉션(collection) ↔ 테이블(table)
특징
- 복잡하고 느린 조인을 사용할 필요 없다.
- 자주 변경되지 않는 데이터일 때
- 대량의 데이터와 높은 사용자 부하에서도 손쉽게 확장이 가능하다.
- schema on read
- 데이터를 입력하는 방식에 따라 읽어올 때만 데이터 스키마가 사용된다.
- 유연한 스키마
- 관계 없음
1. 유연한 스키마
- 다른 구조의 데이터를 같은 컬렉션에 추가할 수 있다.
- 일반적으로 관련 데이터를 넣음
- 필요한 모든 데이터가 하나의 컬렉션 안에 저장되어 있다.
2. 관계 없음
- RDB처럼 여러 테이블에 나누어 담지 않는다.
- Products 정보 또한 Orders에 포함
- 여러 테이블/콜렉션 조인할 필요 없다.
- 조인 개념 X
- 데이터를 복제하여 데이터 일부부을 산출한다.
- 데이터 중복 → 불안정
- 특정 데이터를 같이 사용하는 모든 컬렉션에서 똑같은 업데이트를 수행하도록 해야 한다.
사용성
- 정확한 데이터 구조를 알 수 없거나 변경/확장될 수 있는 경우
- 읽기 처리는 자주 하지만, 변경은 자주 하지 않는 경우
- 데이터베이스를 수평으로 확장해야 하는 경우
- 확장성이나 속도면에서 더 뛰어나다.
확장성 Scalability
- 데이터베이스가 구축된 하드웨어의 성능을 많이 이용하기 때문에 비용이 많이 든다.
- 여러 서버에 걸쳐서 데이터베이스의 관계를 정의할 수 있지만, 매우 복잡하고 시간이 많이 소모된다.
수직적 확장 Vertical Scaling
- 단순히 데이터베이스 서버의 성능 향상
- 메모리, CPU 업그레이드
- SQL 데이터베이스는 수직적 확장만을 지원한다.
수평적 확장 Horizontal Scaling
- 더 많은 서버가 추가되고 데이터베이스가 전체적으로 분산됨
- 하나의 데이터베이스에서 작동하지만 여러 호스트에서 작동한다.
- 저렴한 서버 증설 혹은 클라우드 서비스 이용
- NoSQL 데이터베이스는 수평적 확장을 지원한다.
- 많은 트래픽을 보다 편리하게 처리할 수 있다.
출처