[Database] SQL vs NoSQL
Updated:
SQL
- Structured Query Language
- 특정 유형의 데이터베이스와 상호작용하는 데 사용하는 쿼리 언어
- 뭉뚱그려 RDBMS(관계형 데이터베이스)를 칭하기도 함
- RDBMS의 특징
- 데이터는 엄격한 스키마(structure)에 따라 테이블에 저장
- 데이터는 관계를 통해 연결된 여러 테이블에 분산
엄격한 스키마
- 테이블은 명확하게 정의된 구조(structure)로 설계
- structure : 데이터의 요소를 정의하는 field(column)의 집합
- 데이터는 테이블에 record(row) 형태로 저장
- 스키마를 준수하지 않는 레코드는 추가할 수 없음
관계
- 여러 개의 테이블을 나누어 중복을 피할 수 있음
- ex) Users, Products, Orders 여러 테이블을 만들고, 각각의 테이블들은 다른 테이블에 저장되지 않은 데이터만 보유
- 각 테이블마다 중복 없이 하나의 데이터만 관리하여, 다른 테이블에서 수정될 일 없음
NoSQL
- Not only SQL
- 정해진 스키마 없음
- 관계 없음
- 여기서 record를 document라고 부름
- 다른 구조의 데이터를 동일 collection에 추가할 수 있음
- 데이터는 JSON 타입
- join 필요 없이 문서를 모두 갖추어 작성
- join과 같은 기능이 필요하다면, 그냥 데이터를 복제하여 collection에 추가
- 데이터 수정시 복제된 컬렉션에서도 모두 수정해야하는 불편함
수직적(Vertical) & 수평적(Horizontal) 확장(Scaling)
- 수직적 확장 : 데이터베이스 서버 성능 향상
- 수평적 확장 : 많은 서버를 추가하여 데이터베이스를 분산
- SQL은 수직정 확장을, NoSQL은 수평적 확장을 주로 함
- NoSQL에서 지원하는 Sharding은 수평적 확장을 유리하게 함
어떤 DB를 써야하나?
SQL의 장점
- 명확한 스키마, 데이터 무결성
- 관계는 각 데이터 중복 없이 한 번만 저장
NoSQL의 장점
- 스키마가 없어 유연
- 데이터 읽어오는 속도 빠름
SQL의 단점
- 스키마는 사전에 계획되어 유연하지 못 함
- join문이 많은 복잡한 쿼리가 필요할 수 있음
- 수평적 확장의 어려움
NoSQL의 단점
- 유연성 때문에, 데이터 구조 결정이 어려움
- 데이터 중복으로 인해 여러 컬렉션에서 모두 수정 필요
SQL은 언제 사용?
- 관계 맺는 데이터가 자주 수정되는 앱일 경우
- 변경될 여지가 없는 명확한 스키마가 필요할 때
NoSQL은 언제 사용?
- 정확한 데이터 구조를 알 수 없거나 변경/확장될 수 있는 경우
- 읽기를 자주하지만, 데이터를 자주 변경하지 않는 경우
ref :
SQL vs NoSQL
Leave a comment