[MongoDB]SQL vs NoSQl

1.1. SQL vs NoSQL

  • SQL과 NoSQL은 상황에 따라 적용해야함. 무조건적으로 NoSQL이 좋다고 할 수 없음.
  • NoSQL (Non Relational Operation Database SQl) : 비관계형 데이터 베이스

1.1.1. [SQL (관계형 데이터베이스)]

특징

  1. 엄격한 schema : 스키마를 준수하지 않는 레코드 추가 불가
  2. 관계 : 데이터는 여러개의 테이블에 분산되며 서로 관계를 가짐

1. 엄격한 schema

SQLSchema

  • 데이터는 record로 테이블에 저장됨
  • 테이블은 명확히 정의된 구조를 가짐
    • 구조: 필드의 집합. 필드의 이름과 데이터타입으로 정의됨
    • 필드: 어떤 데이터가 테이블에 들어갈지, 말지를 정함
  • shema에 부적합한 데이터는 테이블의 record로 추가 불가

2. 관계 SQL relations

  • 데이터 중복을 피하기 위해 여러 테이블로 데이터를 나눔.
  • 이러한 구조의 장점 : 부정확한 데이터 삽입 발생 X

SQL에선 정해진 schema를 따르지 않으면 데이터 추가 불가

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

  • NoSQL의 Collection은 SQL의 Table
  • NoSQL의 document는 SQL의 record
  • document는 JSON과 비슷한 형태
  • 일반적으로 관련 데이터를 동일한 Collection에 넣음

NoSQL

특징

  • schema 無
  • 관계 無

NoSQL에선 다른 구조의 데이터를 같은 컬렌션에 추가 가능

1.1.3. 수직적, 수평적 확장

  • 수직적 확장
    • 데이터베이스 서버의 성능을 향상 시킴(CPU 업그레이드 등)
  • 수평적 확장
    • 서버가 추가되고 데이터베이스가 전체적으로 분산
    • 하나의 데이터베이스에 대해 여러 호스트 작동

Vertical & Horizontal Scailing

  • 일반적으로 SQL DB는 수직적 확장만 지원. 수평적 확장은 NoSQL DB에서만 가능
    • SQL의 Sharding : 제한이 많고 구현의 어려움 존재
    • NoSQL은 기본적으로 지원. 쉽게 여러 서버에서 DB를 나눌 수 있음

1.1.4. 선택

  • 어떤 데이터를 다루는지, 어떤 애플리케이션에서 사용되는지를 종합적으로 고려

SQL의 장점

  1. 명확하게 정의된 schema로 데이터 무결성 보장
  2. 관계는 각 데이터를 중복없이 한 번만 저장

SQL의 단점

  1. NoSQL보다 덜 유연 : 데이터 schema는 사전에 계획되어야
  2. Join문으로 인해 복잡한 쿼리
  3. 수평적 확장의 어려움 : 특정 시점에서 처리할 수 있는 데이터 양과 관련해 한계가 발생할 수 있음

NoSQL의 장점

  1. 불필요한 join 최소화
  2. 유연성있는 서버 구조 제공
  3. 분산처리 및 병렬처리 기능
  4. 수직 및 수평 확장 가능 : 애플리케이션에서 발생시키는 모든 Read/Write 요청 처리 가능

NoSQL의 단점

  1. 데이터가 여러 컬렉션에 중복 : 수정을 해야하는 경우 모든 컬렉션에서 수행해야 함

SQL은 언제 사용?

관계를 맺고있는 데이터가 자주 변경되는 애플리케이션일 경우
변경될 여지가 없고, 명확한 스키마가 사용자와 데이터에게 중요한 경우

NoSQL은 언제 사용?

정확한 데이터 구조를 알 수 없거나 변경 또는 확장될 수 있는 경우
읽기 처리를 자주하지만, 데이터를 자주 변경하지 않는 경우
데이터베이스를 수평으로 확장해야하는 경우(막대한 양의 데이터 다룰 경우)

참조

  • SQL vs NoSQL : https://academind.com/learn/web-dev/sql-vs-nosql/