SQL vs NoSQL

Vorhandenheit ·2021년 12월 16일
0

Database

목록 보기
2/28

SQL vs NoSQL

1. 스키마(Schema)

  • SQL : 고정된 형식의 스키마가 필요합니다. 형식을 준수하지않으면 레코드를 추가할 수 없고, 스키마를 변경하고 싶다면 데이터베이스 전체를 수정하거나 오프라인으로 전환할 필요가 있습니다. 그래서 '엄격한 스키마'라고 표현합니다.

NoSQL : 관계형 데이터베이스보다 동적으로 스키마 형태를 관리, 행을 추가할 때 즉시 새로운 열을 추가할 수 있고, 개별 속성에 대해서 모든 열에 대해 데이터를 반드시 입력하지 않아도 됩니다.

2. 확장성(Scalability)

  • SQL : 수직적으로 확장, 단순히 데이터베이스 서버의 성능을 향상시키는 것 입니다.(CPU 업그레이드)
  • NoSQL : 수평적으로 확장, 비용이 저렴 (더 많은 서버를 추가하고 데이터베이스가 분산됨을 의미)

3. Property

  • SQL : ACID 특성을 따름

    Atomicity(원자성)
    : 트랜잭션의 작업이 부분적으로 실행되거나 중단되지 않는 것을 보장하는 것이다.
    (불가능한 최소의 단위인 하나의 원자처럼 동작한다는 의미이다.)
    Consistency(일관성)
    : 미리 정의된 규칙에서만 수정이 가능한 특성을 의미한다.
    (숫자 컬럼에 문자열값이 저장이 안되도록 보장한다.)
    Isolation(고립성)
    : 트랜잭션 수행시 다른 트랜잭션의 작업이 끼어들지 못하도록 보장하는 것이다.
    Durability(영구성)
    : 성공적으로 수행된 트랜잭션은 영원히 반영이 되는 것을 의미한다.
    (한번 반영(commit)된 트랜젝션의 내용은 영원히 적용된다.)

  • NoSQL : CAP이론을 따름

Consistency (일관성)
: 모든 요청은 최신 데이터 또는 에러를 응답받는다.
(DB가 3개로 분산되었다고 가정할 때, 하나의 특정 DB의 데이터가 수정되면
나머지 2개의 DB에서도 수정된 데이터를 응답받아야 한다.)
Availability (가용성)
: 모든 요청은 정상 응답을 받는다.
(특정 DB가 장애가 나도 서비스가 가능해야 한다.)
Partitions Tolerance (분리 내구성)
: DB간 통신이 실패하는 경우라도 시스템은 정상 동작 한다.

4. query

NoSQL : 쿼리는 데이터 그룹 자체를 조회하는 것에 초점을 두고 있습니다.

SQL : 데이터베이스에 대해서 정보를 요청하는 질의문, 테이블의 형식과 테이블 간의 관계에 맞춰서 데이터를 요청해야 합니다.

5. 데이터 저장

NoSQL : key-value, document, wide-column, graph 등 방식으로 데이터를 저장
SQL : 테이블에 저장, 미리 작성된 스키마를 기반으로 정해진 형식에 맞게 데이터를 저장

장점

SQL

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

NoSQL

  • 스키마가 없기 때문에 유연, 언제든지 저장된 데이터를 조정하고 새로운 '필드'를 추가 할수 있습니다,

  • 애플리케이션이 필요로하는 형식으로 데이터가 저장됩니다.

단점

SQL

  • 상대적으로 덜 유연하며 데이터 스키마는 사전에 계획되어져야 합니다.
  • JOIN문이 매우 복잡한 쿼리가 만들어질 수 있습니다.
  • 수평적 확장이 어렵고, 어떤 시점에 성장 한계에 직면하게 됩니다.

NoSQL

  • 유연성으로 인해 데이터 구조 결정을 미루게 될 수 있습니다.
  • 데이터 중복을 계속 업데이트 해야합니다.

사용

SQL

  • 관계를 맺고 있는 데이터가 자주 변경(수정)되는 애플리케이션일 경우 (NoSQL에서라면 여러 컬렉션을 모두 수정해줘야만 합니다.)
  • 변경될 여지가 없고, 명확한 스키마가 사용자와 데이터에게 중요한 경우

NoSQL

  • 정확한 데이터 구조를 알 수 없거나 변경 / 확장 될 수 있는 경우
  • 읽기(read)처리를 자주하지만, 데이터를 자주 변경(update)하지 않는 경우 (즉, 한번의 변경으로 수십 개의 문서를 업데이트 할 필요가 없는 경우)
  • 데이터베이스를 수평으로 확장해야 하는 경우 ( 즉, 막대한 양의 데이터를 다뤄야 하는 경우)
profile
읽고 기록하고 고민하고 사용하고 개발하자!

0개의 댓글