RDB와 NoSQL의 차이

2024. 2. 23. 17:10CS/DB

RDB와 NoSQL의 차이

RDB 특징

  • 기존의 테이블에 컬럼을 변경하고자 할 경우, 스키마를 변경해야줘야한다.
    • 이미 기존에 대용량의 데이터가 저장된 경우에 스키마를 변경한다면, 상당히 위험 부담이 크다. → 유연한 확장성이 부족하다.
  • 중복 제거를 위해 정규화를 진행함으로써, 데이터 중복을 최소화할 수 있지만, join을 함으로써 응답시간이 길어진다. → 복잡한 join은 Read성능을 하락시킨다.
  • RDB는 기본적으로 한대의 컴퓨터에 저장한다.
    • Read/Write요청이 매우 많아진다면, 기존 RDB를 저장한 서버는 부하가 많이 발생한다.
      • 위 경우, scale up을 통해 DB 성능을 향상시킨다. (컴퓨터 자체를 성능 좋은 컴퓨터로 바꾼다는 의미임.)
      • 혹은, 컴퓨터를 여러대 둔다.(scale-out) 그러나, RDB가 scale-out에 유연한 DB는 아니다.
  • 트랜잭션 ACID를 보장한다.
    • 그러나 ACID를 보장하려다보니, DB 서버의 성능에 영향을 미친다.

NoSQL 특징

  • mongoDB, Redis 등 종류가 다양하다.
    • Redis
      • in-memory, key-value형태로 저장, cache혹은 db로 사용한다.
  • flexible Schema
    • mongoDB의 경우,
      • db.createCollection(”student”) // student테이블 생성
      • db.student.insertOne({ name : “easycode” }) // student테이블의 name컬럼에 easycode데이터 추가
      • 이처럼, flexible Schema 특징을 가진다.
      • 단, application레벨 (개발자)에서 스키마관리가 필요하다.
  • 중복을 허용 (join회피)
    • 단, application레벨에서 중복된 데이터들이 모두 최신 데이터를 유지할 수 있도록 관리해야한다.
  • scale-out에 최적화되어있다.
    • 서버 여러대로 하나의 클러스터를 구성하여 사용한다.
  • ACID의 일부를 포기하고 high-throughput(높은 처리량), low-latency(빠른 응답성)를 추구한다.
    • 금융/결제/예약 시스템처럼, consistency가 중요한 환경에서는 NoSQL을 사용하기가 조심스럽다.
  • 참조블로그