카테고리 없음

NoSql vs Sql

sihanni 2024. 11. 25. 13:53

 

SQL

  • 관계형 데이터베이스 (Relational Database Management System)
  • 데이터를 표(테이블) 형식으로 저장
    • 행(row)과 열(column)로 데이터를 표현
  • 엄격한 스키마(schema)를 요구
    • 테이블 간의 관계를 PK, FK 등으로 정의
    • 스키마 변경시 데이터 마이그레이션이 필요
  • 데이터 간의 관계를 명확히 정의 해야한다.
  • 데이터의 무결성(integrity)을 유지하는데 중점
  • MySQL, PostrgreSQL, OracleDB ...
  • 확장
    • 주로 수직 확장: 단일 서버의 CPU, 메모리, 스토리지를 증가시키는 방식
    • replication, **sharding 으로 수평 확장을 구현할 수 있지만 복잡도 증가  
  • ACID
    • 트랜잭션의 안전성을 보장하기 위한 성질
    • Atomicity(원자성)
      하나의 트랜잭션에 속해 있는 모든 작업이 전부 성공, 전부 실패해 결과를 예측할 수 있어야 한다.
    • Consistency(일관성)
      트랜잭션 처리 전과 후 데이터 모순이 없는 상태일 것
    • Isolation(독립성)
      모든 트랜잭션은 다른 트랜잭션으로부터 독립 될 것
    • Durability(지속성)
      성공한 트랜잭션에 대한 반영은 영구적일 것.
      트랜잭션은 로그에 모든 것이 저장된 후에만 커밋상태로 간주 된다.
  • 테이블 디자인 중요

NoSQL (Not Only SQL)

  • 스키마가 없거나 느슨하다.
  • 데이터를 다양한 형태로 저장할 수 있다.
    • 문서형(Document-based): JSON/BSON 형식 -> MongoDB
    • 키-값(Key-Value): 데이터가 키-값 쌍으로 저장 -> Redis
  • 수평적 확장성과 유연성에 초점이 맞춰져 있다.
  • 비정규화: 중복 데이터를 허용해 성능 최적화
  • MongoDB, Redis, DynamoDB
  • 확장
    • 주로 수평 확장: 다수의 서버를 추가하는 방식으로 확장, 데이터는 자동으로 샤딩되고, 서버 간 분산 저장
  • BASE
    • Basically, Available (가용성)
      데이터는 항상 접근가능하며, 다수 스토리지에 복사본을 저장한다.
    • Soft State (독립성)
      노드의 상태는 외부에서 전송된 정보를 통해 상태를 결정한다.
    • Eventually consistent (일관성)
      일정 시간 경과 시 데이터의 일관성 유지되는 속성
  • 쿼리 디자인 중요

사용 사례

SQL NoSQL
은행, 금융시스템 (데이터 무결성이 중요) 소셜 네트워크, 실시간 분석
전자 상거래 주문 관리 IoT 데이터 저장
관계형 데이터가 명확한 경우 로그 데이터 저장, 비정형 데이터(image, Json 등)

 

장단점

  장점 단점
SQL 강력한 데이터 무결성 및 일관성 보장
표준화된 언어 (쿼리) 사용

스키마변경이 어렵다.
수평 확장에 제한적이다.
NoSQL 스키마 유연성으로 데이터 변경에 용이
수평 확장이 쉬워 대규모 데이터 처리에 적합
비정형 데이터 저장에 유리
데이터 중복 가능성
복잡한 쿼리 및 트랜잭션 처리 제약
데이터베이스마다 쿼리 언어가 다르다.

 

 

 

Repliacation

 

데이터를 여러 데이터베이스 서버에 복사하여 동일한 데이터를 여러 위치에서 유지하는 기술이다.

주로 고가용성, 장애 복구 목적으로 사용된다.

내가 이전회사에서 사용했던 방식은 Primary-Secondary 모델이다.

Primary (Master DB): 데이터를 쓰는(Write) 유일한 노드

Secondary (Slave DB): Primary의 데이터를 읽기 전용으로 복제하는 DB

실시간 주가 데이터 따위들을 저장하고 보관하기 위해,
AWS RDS에 마스터디비 인스턴스와 슬레이브 디비 인스턴스를 띄워두고 슬레이브 디비인스턴스에 복제본 설정을 해뒀던 것으로 기억한다.

주가를 제공해주는 쪽의 DB 인스턴스(Master DB) -> Slave DB -> Read -> 서비스 DB

 

Sharding

 

데이터를 수평적으로 분할하여 서로 다른 서버에 분산 저장하는 기술이다.

데이터베이스를 여러 샤드(shard)로 나누어 각 샤드가 전체 데이터의 일부만 저장한다.

Shard Key

데이터를 분할할 기준이 되는 키 (사용자 id, 지역,시간)

분할 전략
범위 기반 분할 (샤드 키의 값 범위에 따라 데이터를 나누는 것)
해시 기반 분할 (샤드 키에 해시 함수를 적용하여 샤드를 결정)
지리적 분할( 데이터의 물리적위치를 기준으로 나눔)

특징 Replication Sharding
목적 데이터 복제 및 가용성 향상 데이터 분할 및 확장성향상
데이터 분포 모든 서버가 동일한 데이터 보유 각 서버는 데이터의 일부분만 보유
읽기/쓰기 읽기 성능 향상, 쓰기 성능 영향 가능 읽기/쓰기 성능 모두 향상 가능
확장성 제한적 무제한
복잡성 비교적 단순 복잡 (샤드키 설계, 라우팅 필요)
사용 사례 고가용성, 읽기 부하 분산 대규모 데이터 분산, 쓰기 부하 분산