본문 바로가기

CS/데이터베이스

SQL vs NoSQL

1. SQL (관계형 DB)

  • 데이터는 정해진 데이터 스키마에 따라 테이블에 저장된다.
  • 데이터는 관계를 통해 여러 테이블에 분산된다.
  • 즉, 스키마를 준수하지 않은 데이터는 테이블에 추가될 수 없다.
  • 하나의 테이블에서 중복없이 하나의 데이터만을 관리하기 때문에 다른 테이블에서 부정확한 데이터를 다룰 위험이 없다.

장점

  • 명확하게 정의된 스키마
  • 데이터 무결성 보장
  • 각 데이터가 중복없이 한번만 저장된다

단점

  • 덜 유연하다. 스키마를 사전에 계획하고 알려야 한다. (추후 수정 어려움)
  • 관계를 맺고 있어서 복잡한 쿼리가 만들어질 수 있다.
  • 수직적 확장만 가능하다.

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

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

2. NoSQL (비관계형 DB)

  • 스키마도 없고, 관계도 없다.
  • 레코드를 '문서(document)'라고 부른다.
  • JSON과 비슷한 형태로 저장된다.
  • '조인'이라는 개념이 존재하지 않는다.
  • 조인을 하고 싶다면, 컬렉션을 통해 데이터를 복제하여 각 컬렉션 일부분에 속하는 데이터를 산출한다.

장점

  • 스키마가 없어서 유연하다.
  • 데이터는 어플리케이션이 필요로 하는 형식으로 저장된다. 데이터 읽어오는 속도가 빨라진다.
  • 수직/수평 확장이 가능해서 어플리케이션이 발생시키는 모든 읽기/쓰기 요청을 처리 가능하다.

단점

  • 유연성으로 인해 데이터 구조 결정을 미루게 될 수 있다.
  • 데이터 중복을 계속 업데이트 해야 한다.
  • 데이터가 여러 컬렉션에 중복되어 있기 때문에 수정 시 모든 컬렉션에서 수행해야 한다.

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

    읽기를 자주 하지만 데이터 변경은 자주 없는 경우

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

 

수평적 확장은 NoSQL에서만 가능하다.

SQL은 수직적 확장만 지원한다.

'CS > 데이터베이스' 카테고리의 다른 글

DB 정규화  (0) 2021.09.29
이상(Anomaly)  (0) 2021.09.29
트랜잭션의 격리수준  (0) 2021.09.28
Injection  (0) 2021.09.28
수직적 확장과 수평적 분할  (0) 2021.09.28