본문 바로가기

DATABASE

SQL과 NoSQL

SQL - MySQL - RDBMS (관계형) - 체계적이나 보수적임

NoSQL - MongoDB - Node.js - 덜 체계적이나 자유로움

 

상황에 맞게 선택하여 사용하자.


SQL ( 관계형 데이터베이스 )

- 구조화 된 쿼리 언어 (Structured Query Language)

- 특정 유형의 데이터베이스와 상호 작용하는 데 사용하는 쿼리 언어. CRUD 가능.

- 엄격한 스키마(구조)가 존재 : 행(로우, 튜플, 레코드)과 열(컬럼, 속성, 필드)로 구성된 하나의 테이블(관계)

- 관계: 외래키, 조인 때문에 데이터의 중복이 없음

 

SQL 장점

- 명확하게 정의된 스키마, 데이터 무결성 보장

  * 데이터 무결성: 데이터의 정확성과 일관성을 유지하고 보증하는 것

- 관계는 각 데이터를 중복없이 한번만 저장

- 트랜잭션으로 작업의 완전성을 보장

 

SQL 단점

- 상대적으로 덜 유연. 데이터 스키마는 사전에 계획되고 알려져야함

- 조인이 많은 매우 복잡한 쿼리

- 수평적 확장이 어렵고, 수직적 확장만 가능. 즉, 성장에 한계가 있음

 

SQL은 언제 사용할까?

- 관계를 맺고 있는 데이터가 자주 변경되는 경우

- 변경될 여지가 없고, 명확한 스키마와 데이터에게 중요한 경우

- 금융 산업과 같이 자주 변하지 않는 보수적인 시스템에서 주로 사용

 

 


NoSQL ( 비관계형 데이터베이스 )

- Not Only SQL, Non relational Database

- 스키마 없음, 관계 없음. 데이터간의 관계를 정의하지 않음. 자유로움.

- 테이블과 같은 개념으로 컬렉션이라는 형태로 데이터를 관리

- 레코드를 '문서'라고 부름. 문서는 JSON 데이터와 비슷한 형태를 가짐.

- Key-Value 형태를 가짐

- 정리하자면, 컬렉션 안에 여러 문서들을 가지고 있다고 생각하면 될듯!

- 조인이라는 개념이 없음. 데이터가 필요하다면 복제해서 산출

- SQL보다 대용량의 데이터 저장 가능

- Key에 대한 put/get만 지원

 

NoSQL 장점

- 스키마가 없기 때문에 높은 유연성. 언제든지 저장된 데이터를 조정하고 새로운 필드 추가 가능

- 간단한 구조로 데이터를 읽어오는 속도가 빠름

- 수직 및 수평 확장 가능

 

NoSQL 단점

- 유연성 때문에 데이터 구조 결정을 하지 못할 수 있음

- CRUD가 자유롭지 못함

- 자유롭게 데이터 추가가 가능하기 때문에 컬렉션에 중복된 데이터 저장 가능

  따라서, 데이터 업데이트시 중복되어 저장되어있는 데이터를 똑같이 업데이트해 주어야함. 번거로움.

 

NoSQL은 언제 사용할까?

- 정확한 데이터 구조를 알 수 없거나 변경 / 확장될 수 있는 경우

- 읽기 처리를 자주 하지만, 데이터를 자주 변경하지는 않는 경우 (한번의 변경으로 수십 개의 문서를 업데이트 할 필요가 없는 경우)

- 데이터베이스를 수평으로 확장해야하는 경우 (막대한 양의 데이터를 다뤄야하는 경우)

- SNS (페이스북, 인스타그램, 트위터 등)

- 장바구니에 담는 작업을 캐싱을 기반으로 처리할 때 SQL에 비해 더 빠르고 효과적

 

 

 

 

출처

siyoon210.tistory.com/130