DB

[DB] RDBMS vs NoSQL

코리늬 2020. 11. 27. 19:00

RDB를 써야 할까? NoSql을 사용해야 할까? NoSql은 어떨 때 사용하는 걸까?
궁금증으로부터 출발했다.

 

RDBMS와 NoSQL에 대해서 알아보자.

 

RDB(Relational Database)

특징

  • 구조화된 쿼리 언어(Structured Query Language)
  • 정해진 데이터 스키마에 따라 DB 테이블에 저장된다.
  • 관계를 통해 연결된 여러 테이블에 분산된다.
  • 관계형 데이터베이스로 대표적으로 MySql, Oracle, PostgreSql 등이 있다.

 

장점

각 테이블에 정의된 구조(필드명, 데이터 유형)가 있기 때문에 스키마를 준수하지 않는 레코드는 추가할 수 없다.

관계에 의해 데이터를 여러 테이블에 나누어 저장하기 때문에 중복 데이터가 없다.

  • 복잡한 형태의 쿼리(join)가 가능하다.

 

단점

  • 대량의 데이터 입력, 조회 시 성능이 저하된다.

  • 확장성이 좋지 않다.

    성능을 높이기 위해서 H/W를 고성능으로 교체해야 한다. -> 돈이 많이 든다.


NoSql (NotOnlySql)

특징

  • 대표적으로 mongoDB, Redis, hBase 등이 존재

  • RDB의 확장성 이슈를 해결하기 위해 나온 모델

    분산 컴퓨팅이 가능해 확장성이 좋다. (Scale Out)

  • 스키마가 존재하지 않아 자유롭게 데이터 관리가 가능.

    관계가 존재하지 않는다.

  • key - value 방식으로 데이터 관리

 

장점

  • 데이터 분산처리에 용이
  • 수직, 수평적 확장이 가능(샤딩)
  • 속도가 빠르다(데이터를 컬렉션 형태로 저장하기 때문에).
  • 스키마가 존재하지 않기 때문에 유연하다.

 

단점

  • 데이터가 여러 컬렉션에 중복되어 있기 때문에, 수정해야 하는 경우 모든 컬렉션을 update 해줘야 한다.
  • 스키마가 존재하지 않기 때문에 중복된 데이터가 있을 수 있다.

 


 

RDB를 사용해야 하는 경우

  • 데이터의 정확성을 보장해야 하는 경우

NoSql을 사용해야 하는 경우

  • 데이터 형식이 다양하고, 정확성보다는 데이터의 양이 중요한 경우
  • 정확한 데이터 구조를 알 수 없거나 / 확장될 수 있는 경우
  • DB를 수평적으로 확장해야 하는 경우 (Big Data)