beomsic 2022. 10. 5. 18:11

관계형 데이터베이스


고정된 행과 열로 구성된 테이블 에 데이터가 저장된다.

테이블의 구조와 데이터 타입등을 사전에 정의하고 정의된 내용에 알맞는 데이터만 삽입할 수 있다.

엄격한 스키마

  • 데이터는 테이블에 레코드로 저장되며, 각 테이블에는 명확하게 정의된 구조가 있다.

관계

  • 데이터들을 여러개의 테이블으로 나누어, 데이터들의 중복을 피할 수 있다.

테이블 간의 관계를 직관적으로 파악할 수 있다.

SQL

  • 구조화된 쿼리 언어
  • 특정 유형의 데이터베이스와 상호 작용하는데 사용하는 쿼리 언어

비 관계형 데이터베이스


데이터가 고정되어 있지 않은 데이터 베이스

  • 데이터의 모델에 따라 유형이 다양하다.

스키마가 없는 것이 아니다!

특징

  1. 데이터 간의 관계를 정의하지 않는다.
  2. 대용량의 데이터를 저장할 수 있다.
  3. 분산형 구조이다.
    • 여러 곳의 서버에 데이터를 분산 저장해 특정 서버에 장애가 생겨도 데이터 유실 혹은 서비스 중지가 발생하지 않도록 한다.
  4. 고정되지 않은 테이블 스키마를 갖는다
    • 스키마가 유동적

데이터 유형

  1. key-value
    • key-value 쌍으로 나타내는 데이터를 배열의 형태로 저장한다.
    • 단순한 구조 → 속도가 빠르고 분산 저장시 용이
    • Redis, DynamoDB
  2. document
    • 데이터를 테이블이 아닌 문서처럼 저장한다.
    • 스키마가 유동적, 레코드 마다 각각 다른 스키마를 가질 수 있다.
    • JSON 과 유사한 형식의 데이터를 문서화 하여 저장
    • 트리형 구조로 레코드를 저장하거나 검색하는데 효과적이다.
    • MongoDB
  3. wide-column
    • 행 마다 키와 해당 값을 저장할 때마다 각각 다른 값의 다른 수의 스키마를 가질 수 있다.
    • key에 해당하는 값에 스키마들이 각각 다르다.
    • 압축, 분산처리, 집계 쿼리(SUM, COUNT, AVG 등) 및 쿼리 동작 속도, 확장성이 뛰어남
    • Hbase, Cassandra
  4. graph
    • 데이터를 노드로 표현하며 노드 사이의 관계를 엣지로 표현
    • 일반적으로 RDBMS보다 성능이 좋고 유연하며 유지보수에 용이하다.
    • Social networks, network diagrams 등에 사용할 수 있다.
    • Neo4j, BlazeGraph

장 / 단점

장점 단점
RDBMS에 비해 저렴한 비용으로 분산처리와 병렬 처리 가능 데이터 업데이트 중 장애 발생시 데이터 손실 발생 가능
비정형 데이터 구조 설계로 설계 비용 감소 많은 인덱스를 사용하려면 충분한 메모리가 필요하다.
- 인덱스 구조가 메모리에 저장됨.
Big Data 처리에 효과적 데이터 일관성이 항상 보장되지 않는다.
가변적인 구조로 데이터 저장이 가능  
데이터 모델의 유연한 변화가 가능  

 

확장 (Scaling)


두 종류의 데이터베이스를 비교할 때 확장(Scaling)이라는 개념이 매우 중요하다.

(데이터베이스 서버의 확장성)

수직적 (vertical) 확장

단순히 데이터베이스 서버의 성능을 향상

  • CPU 업그레이드

수평적 (horizontal) 확장

더 많은 서버가 추가되고 데이터베이스가 전체적으로 분산

  • 하나의 데이터베이스에서 작동하지만 여러 호스트에서 작동

SQL 데이터베이스는 데이터가 저장되는 방식 때문에 일반적으로 수직적 확장만 지원한다.

NoSQL 데이터베이스에서만 수평적 확장이 가능하다.

SQL / NoSQL


SQL

장점

  • 명확하게 정의된 스키마, 데이터 무결성 보장
  • 관계는 각 데이터를 중복없이 한번만 저장

단점

  • 데이터 스키마를 사전에 정의하고 알려줘야 한다.
  • 조인문이 많은 복잡한 쿼리가 만들어질 수 있다.
  • 수직적 확장만 가능

언제 사용 ❓

관계를 맺고 있는 데이터가 자주 변경되는 애플리케이션

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

NoSQL

장점

  • 스키마가 없어 유연하다
  • → 언제든지 저장된 데이터를 조정하고 새로운 필드 추가 가능
  • 애플리케이션이 필요로 하는 형태로 데이터가 저장된다.
  • → 데이터를 읽어오는 속도가 빨라진다.
  • 수직, 수평 확장이 가능하다.
  • → 애플리케이션이 발생시키는 모든 읽기/쓰기 요청 처리 가능하다.

단점

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

언제 사용 ❓

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

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

데이터베이스를 수평으로 확장해야 하는 이유

참고 자료

http://www.yes24.com/Product/Goods/108887922

 

면접을 위한 CS 전공지식 노트 - YES24

디자인 패턴, 네트워크, 운영체제, 데이터베이스, 자료 구조, 개발자 면접과 포트폴리오까지!CS 전공지식 습득과 면접 대비, 이 책 한 권이면 충분하다!개발자 면접에서 큰 비중을 차지하는 CS(Comp

www.yes24.com

https://gyoogle.dev/blog/computer-science/data-base/SQL%20&%20NOSQL.html

 

SQL과 NOSQL의 차이 | 👨🏻‍💻 Tech Interview

SQL과 NOSQL의 차이 웹 앱을 개발할 때, 데이터베이스를 선택할 때 고민하게 된다. 보통 Spring에서 개발할 때는 MySQL을, Node.js에서는 MongoDB를 주로 사용했을 것이다. 하지만 그냥 단순히 프레임워크

gyoogle.dev