Cs/DataBase

RDBMS와 NoSQL

ukkkk7 2023. 11. 26. 15:36
728x90
반응형

RDBMS와 NoSQL의 개념과 각각의 차이점

 

RDB란?

RDB키(key)와  값(value)들의 간단한 관계를 테이블화 시킨 매우 간단한 원칙의 전산 정보 데이터베이스이다.

 

RDB의 장점?

  • 정형화된 데이터를 저장하기 때문에 데이터의 형태와 크기를 미리 정하고 테이블 단위로 구분하여 데이터를 저장
  • 트랜잭션을 통해 ACID(원자성, 일관성, 격리성, 지속성)를 보증하기 때문에 안정적인 데이터 관리가 가능하다.
  • 조인을 포함해 복잡한 조건을 포함하는 데이터 검색이 가능하다.(복잡한 질의 처리 가능)
  • 정규화를 통해 데이터 중복성을 줄이고 데이터 무결성을 개선하는 설계 기법을 사용한다.

 

RDBMS 란?

DBMS 앞에 R(Relational) 이 추가되어 관계형 데이터베이스 관리 시스템이라고 한다.

RDB는 관계형 데이터 모델을 기초로 두고 모든 데이터를 2차원 테이블 형태로 표현하는 데이터베이스로, RDBMS는 관계형 데이터베이스를 생성하고 수정, 삭제, 관리할 수 있는 소프트웨어 라고 정의한다.

 

 

 

대표적인 RDBMS 종류에는 위와같은 프로그램들이 있다.

 

 

RDBMS의 특징

  • Data를 Coulmn과 Row형태로 저장한다.
  • 데이터의 분류, 정렬, 탐색 속도가 비교적 빠르다.
  • SQL이라는 정교한 검색 Query를 통해 데이터를 다룬다.
  • 반드시 Schema 규격에 맞춰야 한다.(유연한 데이터 저장이 X)

 

RDBMS의 장단점

 

장점

  • 정해진 스키마에 따라 데이터를 저장해야 하므로 명확한 데이터 구조를 보장한다.
  • 관계는 각 데이터를 중복없이 한 번만 저장할 수 있다.

단점

  • 테이블간 관계를 맺고 있어 시스템이 커질 경우 JOIN문이 많은 복잡한 쿼리가 만들어질 수 있다.
  • 성능 향상을 위해선 서버의 성능을 향상 시겨야 하는 Scale-up만을 지원한다 이로인해 비용이 증가한다.-> RDB는 수평적 확장이 불가능하기 때문
  • 스키마로 인해 데이터가 유연하지 못하다.

RDB는 수평적 확장이 불가능하기 때문?

 

이런 테이블 2개와 기존 A,B 서버에 C서버를 추가한다고 가정하면

게시글

A서버: 1,2

B서버: 3

C서버: 4

 

댓글

A서버: 1

B서버: 2,3

C서버: 4

이렇게 되면 데이터를 어떤 기준으로 나누어 저장할지 부터 만약 A서버에 있는 게시글 1에 댓글 3,4가 속해 있다면 모든 서버를 뒤져야 한다.

이렇게 관계가 생기고 데이터가 늘어날수록 RDB에서는 수평확장에 대한 관리가 복잡해진다

 

 

 

NoSQL(Not Only SQL)란?

NoSQL에서는 RDBMS와는 달리 테이블 간 관계를 정의하지 않는다.

데이터 테이블은 그냥 하나의 테이블이고 테이블 간의 관계를 정의하지 않아 테이블 간 Join이 불가능하다.

 

빅데이터의 등장으로 인해 데이터와 트래픽이 기하급수적으로 증가함에 따라 RDBMS의 단점인 성능을 향상시키기 위해 장비가 좋아야 하는 Scale-up의 특징이 비용을 기하급수적으로 증가되기 때문에 

데이터 일관성은 포기하되 여러대의 데이터에 분산하여 저장하는 Scale-out을 목표로 등장했다.

 

 

NoSQL의 특징

  • ACID를 위한 트랜잭션 기능을 제공하진 않지만 저렴한 비용으로 여러대의 컴퓨터에 데이터를 분산, 저장, 처리하는 것이 가능
  • 데이터 구조를 미리 정의할 필요가 없고, 수시로 구조를 바꿀 수 있어 비정형 데이터.
  • 수평 확장이 가능하여 서버 확장에 용이하다.
  • 여러 대의 서버 구성이 가능하여 장애 발생시에도 무중단 서비스가 가능하다.

 

NoSQL의 장단점

 

장점

  • 스키마가 없기 떄문에 자유로운 데이터 구조를 가질 수 있다.
  • 데이터 분산이 용이하며 성능 향상을 위한 Scale-up뿐만 아니라 Scale-out 또한 가능하다.

단점

  • 데이터 중복이 발생할 수 있다.
  • 스키마가 존재하지 않기 때문에 명확한 데이터 구조를 보장하지 않으며 데이터 구조 결정이 어려울 수 있다.
  • 데이터를 수정하는 경우 모든 컬렉션에서 수정해야 하기 때문에 느리다.
  • key값에 대한 입,출력만 지원한다.

 

RDBMS와 NoSQL 어떤걸 써야할까?

데이터베이스를 사용하는 업무 환경과 역량에 가장 적합한 것을 선택해야 한다.

즉, 저장될 데이터의 형태와 처리목적에 더 적합한 것을 선택하면 된다.

 

RDBMS는 기업의 인사, 회계 자료와 같이 일관성이 중요하고 조인과 같이 복잡한 질의 처리가 필요한 정형화된 데이터를 관리하는 용도일 때 더 적합하다.

 

NoSQL은 SNS를 통해 양산되는 이미지와 텍스트 데이터, CCTV를 통해 촬영되는 영상들 수정보다는 삽입 연산 위주의 데이터를 저장하고 관리하는 용도일 때 적합하다.

 

RDBMS와 NoSQL을 몇가지 측면에서 비교한 표이다.

 

  RDBMS NoSQL
스키마 - 명확한 데이터 구조 보장
- 스키마로 인해 데이터가 유연하지 못함
- 스키마가 없어 유연하고 자유로운 데이터 구조를 가짐
- 명확한 데이터 구조를 보장하지 않아 데이터 구조 결정이 어렵다.
확장성 Scale-up만을 지원(비용이 많이 든다) scale-up scale-out 지원(데이터 분산이 용이)
테이블간 관계성 - 각 데이터를 중복없이 한번만 저장(데이터 일관성 보장)
- 시스템이 커질경우 JOIN문이 많은 반복 쿼리가 만들어진다.
- 데이터 중복이 발생할 수 있으며 중복된 데이터가 변경될 경우 수정을 모든 컬렉션에서 수정해야 함
- 테이블간 관계를 맺지않아 JOIN문 사용불가
데이터 처리 부하 발생시, 처리가 어렵지만 데이터의 UPDATE가 빠름 많은양의 데이터 처리, 저장 할 수 있지만 데이터를 UPDATE하는데 비교적 느리다.
언제 사용? 데이터 구조가 명확하여 변경될 여지가 없고 명확한 스키마가 중요한 경우 사용하는 것이 좋다.

중복된 데이터가 없어 변경이 용이하고 관계를 맺고 있는 데이터가 자주 변경이 이루어지는 시스템에 적합
정확한 데이터 구조를 알 수 없고 데이터 변경/확장이 될 수 있는 경우 사용

데이터 중복이 발생할 수 있으며 중복된 데이터가 변경될 시 모든 컬렉션에서 수정해야 함

UPDATE가 많이 이루어지지 않는 시스템과 막대한 데이터를 저장해야 해서 Scale-out을 해야 하는 시스템에서 사용
대표 프로그램 MySQL, Oracle, PostgreSQL, MariaDB MongoDB, Redis

 

 

 

 

Refereces

https://github.com/devSquad-study/2023-CS-Study/blob/main/DB/db_rdbms_and_nosql.md

https://hstory0208.tistory.com/entry/RDBMS%EC%99%80-NoSQL%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90-%EB%B0%8F-%EA%B0%9C%EB%85%90-%EC%99%84%EB%B2%BD-%EC%A0%95%EB%A6%AC

 

 

 

 

 

728x90
반응형