CS

RDBMS와 NoSQL

김디니 2023. 1. 23. 15:59

DBMS란?

DBMS는 DataBase Management System의 약자로,

사용자와 데이터베이스 사이에서 사용자의 요구에 따라 정보를 생성해 주고 데이터베이스를 관리해 주는 소프트웨어이다.

 

RDBMS, 관계형 데이터베이스

기존의 RDBMS에서의 저장 방식은 SQL에 의해 저장되고 있으며 정해진 스키마에 따라 데이터를 저장해야 한다.

R은(Relational)의 약자로, 관계형 데이터베이스 관리 시스템을 의미한다.

RDBMS는 RDB를 관리하는 시스템이며.

RDB는 관계형 데이터 모델을 기초로 두고 모든 데이터를 2차원 테이블 형태로 표현하는 데이터베이스이다. 

 

 

특징

  • 데이터는 정해진 데이터 스키마에 따라 테이블에 저장된다.
    • 데이터는 테이블에 레코드로 저장되는데, 각 테이블마다 명확하게 정의된 구조가 있다. 해당 구조는 필드의 이름과 데이터 유형으로 정의된다.
    • 따라서 스키마를 준수하지 않은 레코드는 테이블에 추가할 수 없다. 
      • 스키마를 수정하지 않는 이상은 정해진 구조에 맞는 레코드만 추가 가능
  • 데이터는 관계를 통해 여러 테이블에 분산된다.
    • 데이터의 중복을 피하기 위해 관계를 이용한다.
    • 하나의 테이블에서 하나의 데이터만을 관리하기 때문에 다른 테이블에서 부정확한 데이터를 다룰 위험이 없어진다.
  • 외래키 (foreign key) 사용한다.
    • 관계를 나타내기 위해
    • 테이블 간 Join이 가능
  • 데이터의 저장, 수정, 삭제 및 검색 가능하다.

 

 

NoSQL

NoSQL이란 Not Only SQL의 약자로 다른 형태의 데이터 저장 기술을 의미한다.

NoSQL에서는 RDBMS와는 달리 테이블 간 관계를 정의하지 않는다. 그리하여  테이블 간 Join도 불가능하다.

 

NoSQL은 빅데이터의 등장으로 데이터와 트래픽이 기하급수적으로 증가함에 따라 RDBMS에 단점인 성능을 향상시키고자 하였다. 

데이터 일관성은 포기하고, 비용을 고려하여 여러 대의 데이터에 분산하여 저장하는 Scale-Out을 목표로 등장하였습니다.

 

특징

  • 스키마와 관계가 없다.
  • 레코드를 문서라고 부른다.
    • JSON과 비슷한 형태
    • 데이터를 RDB처럼 여러 테이블에 나누어 담지 않고 동일한 컬렉션에 넣는다.
      • Users, Products, Orders 각 테이블에 각 데이터를 넣는 것이 아닌 Orders에 한꺼번에 저장한다.
  • 다른 구조의 데이터를 같은 컬렉션에 추가가 가능하다.
    • 정해진 스키마를 따라서 데이터를 추가할 필요가 없다.
  • Join할 필요 없이 이미 필요한 모든 것을 갖춘 문서를 작성하는 것이다.
    • Join의 개념이 없다.
    • Join 기능을 수행하고 싶을 때
      • 컬렉션을 통해 데이터를 복제하여 컬렉션 일부분에 속하는 데이터를 정확하게 산출하도록 한다.
      • 단점: 데이터가 중복되어 서로 영향을 줄 수 있음
      • 장점: 자주 변경되지 않는 데이터일 때 상당히 효율적

 

 

  RDBMS NoSQL
장점 ▪ 데이터 무결성 보장
 명확하게 정의된 스키마

▪ 관계는 각 데이터를 중복없이 한번만 저장
유연함
→ 스키마가 없으므로 저장된 데이터를 조정하고 새로운 필드 추가 가능

데이터 읽어오는 속도 빨라짐

데이터가 애플리케이션이 필요로 하는 형식으로 저장되기때문에

모든 읽기/쓰기 요청 처리 가능

 수직 및 수평 확장이 가능하기 때문에
단점 ▪ 덜 유연함
데이터 스키마를 사전에 계획하고 알려야줘야 하기 때문에 수정이 힘들다.

▪ Join으로 인해 복잡한 쿼리 생성 가능성이 있음

수직적 확장만 가능함

▪ 수정 시 한번만 수행

데이터 구조 결정을 미루게 될 수 있음
→ 유연하기 때문에

▪ 데이터 중복 계속 업데이트


수정 시 모든 컬렉션에서 수행
데이터가 여러 컬렉션에 중복되어 있기 때문에
사용 데이터가 자주 변경되는 애플리케이션의 경우

명확한 스키마가 사용자와 데이터에게 중요한 경우


▪ 정확한 데이터 구조를 알 수 없거나 변경/확장 될 수 있는 경우

▪ 읽기를 자주 하지만, 데이터 변경은 자주 없는 경우

▪ 데이터베이스를 수평으로 확장해야 하는 경우 (막대한 양의 데이터를 다뤄야 하는 경우)
확장 개념
(Scaling 개념)
수직적 확장 
→ 단순히 데이터베이스 서버의 성능을 향상시키는 것
(ex. CPU 업그레이드)
수평적 확장
→ 더 많은 서버가 추가되고 데이터베이스가 전체적으로 분산됨
(하나의 데이터베이스에서 작동하지만 여러 호스트에서 작동)

 

'CS' 카테고리의 다른 글

클린코드와 리팩토링  (2) 2023.01.25
프로세스와 스레드 Process & Thread  (0) 2023.01.23
[네트워크] TCP/UDP 특징  (1) 2023.01.16
SOLID 객체지향 5원칙  (0) 2023.01.10
디자인 패턴 Design Pattern  (0) 2023.01.09