SQL과 NoSQL

2024. 11. 20. 22:20·CS/Database

 

❐ SQL(Structed Query Language)


SQL(Structured Query Language)은 관계형 데이터베이스(RDBMS)를 관리하기 위한 언어로,

구조화된 데이터를 테이블 형식으로 관리하는 데 사용됩니다. 데이터를 효율적으로 저장, 수정, 삭제,

검색할 수 있도록 설계되었습니다.

  • 고정된 스키마: 사전에 데이터 구조(스키마)를 정의해야 합니다.
  • 테이블 기반: 데이터를 행과 열로 구성된 테이블에 저장합니다.
  • 관계형 데이터 모델: 테이블 간 관계를 설정하여 데이터를 연결하고 관리합니다.
  • ACID 특성: 트랜잭션의 안정성을 보장합니다.

대표적인 SQL 데이터베이스에는 MySQL, PostgreSQL, Oracle 등이 있습니다.

 

 

 

 

 

❐ NoSQL(Not Only SQL)


1. NoSQL이란?

NoSql은 비관계형 데이터베이스로, 구조화되지 않은 데이터나 반정형 데이터를 유연하게 관리할 수 있도록

설계된 데이터베이스입니다. 주로 대규모 데이터 처리와 높은 확장성을 요구하는 환경에서 사용됩니다.

 

아래와 같은 특징을 가지고 있습니다.

  • 유연한 스키마 : 사전에 스키마를 정의하지 않아도 데이터를 저장할 수 있다.
  • 다양한 데이터 모델 지원
    • key-value store (Redis, DynamoDB)
    • document store (MongoDB, CouchDB)
    • column store (Cassandra, HBase)
    • graph store (Neo4j, Amazon Neptune)
  • 높은 확장성 : 수평 확장이 용이 (클러스트링과 샤딩 지원)
  • CAP이론 중 하나를 중점적으로 선택할 수 있다.
    • Consistency(일관성)
    • Availability(가용성)
    • Partition Tolerance(파티션 허용)

 

2. NoSQL 장점 및 단점

  • 장점
    • 데이터 구조가 고정되지 않아 데이터 스키마 변경이 쉽습니다.
    • 서로 다른 구조의 데이터를 저장할 수 있어, 빠르게 변하는 비즈니스 요구에 대응할 수 있습니다.
    • 수평확장(Sharding)을 지원하여 데이터베이스 서버를 추가할 수 있습니다.
    • 다양한 데이터 모델을 지원하며, 빠른 데이터 처리가 가능합니다.
  • 단점
    • 데이터의 일관성이 부족하여 RDB의 ACID 특성을 완벽히 보장 받지 못합니다.
    • SQL 처럼 복잡한 Join, 트랜잭션 기반의 쿼리 기능이 부족합니다.

 

 

 

 

 

❐ SQL, NoSQL 차이점 정리


 

 

☑️ 이것도 알아 두자! ACID & BASE

더보기

BASE 특성은 NoSQL 데이터베이스가 데이터의 일관성을 완화하고, 높은 가용성과 성능을

중점적으로 설계된 특성을 의미합니다. 이는 관계형 데이터베이스가 따르는 ACID 특성과 대조됩니다.

 

1. Basic Available (기본적인 가용성)

  • 시스템은 항상 가용해야 하며, 데이터의 일부를 사용할 수 없더라도 시스템 전체는 동작을 유지한다.
  • 장애가 발생하거나 일부 데이터에 접근이 제한되더라도 다른 노드는 요청을 처리할 수 있음.

 

2. Soft State (가변적 상태)

  • 시스템 상태는 반드시 즉각적으로 일관성을 유지할 필요는 없으며, 시간이 지나면서 변경될 수 있습니다.
  • 데이터 복제가 비동기로 처리되므로 시스템의 상태가 중간 단계에 머물러 있을 수 있음을 의미

 

3. Eventually Consistent (최종적 일관성)

  • 데이터는 특정 시점에서는 일관되지 않을 수 있지만, 시간이 지나면 모든 노드에 동일한 데이터가 저장
  • NoSQL은 일관성보다 가용성을 우선하며, 이를 통해 높은 성능을 유지합니다. 

 

 

 

 

 

❐ SQL과 NoSQL 둘 중 어는 것을 선택할까?


1. SQL을 선택해야 할 때

데이터의 구조가 명확하고, 복잡한 조인을 사용해야 할 경우에는 SQL을 선택해야 합니다.

또한 무결성과 ACID를 보장 받아야되는 데이터라면 SQL을 쓰는 것이 좋습니다.

 

 

2. NoSQL을 선택해야 할 때

고정된 스키마가 필요 없거나 데이터 구조가 자주 변경되는 경우에 적합합니다.

또한 데이터가 방대하게 증가하고, 샤딩을 통해 성능을 높여야 하는 경우에  고려될 수 있는

스펙이라고 생각합니다. 데이터 간 관계가 적거나, 별도로 관리하지 않아도 되는 경우라면 

NoSQL을 사용을 고려하는 것이 좋다고 생각합니다.

 

 

 

 

 

 


'CS > Database' 카테고리의 다른 글

Partitioning  (0) 2024.11.22
Sharding  (0) 2024.11.22
MVCC (Multi Version Concurrency Control)  (0) 2024.10.02
Lock을 활용한 concurrency control  (0) 2024.10.02
Isolation 레벨과 이상 현상들  (0) 2024.09.26
'CS/Database' 카테고리의 다른 글
  • Partitioning
  • Sharding
  • MVCC (Multi Version Concurrency Control)
  • Lock을 활용한 concurrency control
gilbert9172
gilbert9172
gilbert9172 님의 블로그 입니다.
  • gilbert9172
    バックエンド
    gilbert9172
  • 전체
    오늘
    어제
    • All Categories (173)
      • 우테코 7기 (21)
        • 1주차 (8)
        • 2주차 (5)
        • 3주차 (6)
      • Langauge (4)
        • Java (3)
        • Kotlin (1)
      • Back-End (13)
        • SpringBoot (1)
        • Trouble Shooting (0)
        • Setup & Configuration (1)
        • SQL (3)
        • Redis (8)
      • Architecture (6)
        • Multi Module (1)
        • DDD (5)
      • CS (30)
        • Data Structure (6)
        • Operating System (0)
        • Network (12)
        • Database (10)
        • Design Pattern (2)
      • Algorithm (78)
        • 내용 정리 (18)
        • 문제풀이 (60)
      • DevOps (6)
        • AWS (5)
        • Git (1)
      • Front-End (1)
        • Trouble Shooting (1)
      • Project (6)
        • 페이스콕 (6)
      • Book (7)
        • 이벤트 기반 마이크로서비스 구축 (6)
        • 친절한 SQL 튜닝 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    오블완
    Two-Pointer
    sliding-window
    Back-Tracking
    greedy
    부분단조성
    binarysearch
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
gilbert9172
SQL과 NoSQL
상단으로

티스토리툴바