RDBMS(관계형 DB) 와 NoSQL(비관계형 DB)

박영준·2023년 7월 28일
0

DB

목록 보기
35/41

NoSQL과 RDBMS의 특징과 차이점에 대해서 장, 단점 은 개발자 면접에서 자주 나오는 질문 중의 하나!

RDBMS (관계형 DB)

1. 정의

  • RDBMS (관계형 데이터베이스 관리 시스템)

    • RDB 를 관리하는(Management) 시스템(System)
      • RDB(관계형 데이터베이스)는 객체들 간의 릴레이션으로 데이터를 저장하는 데이터베이스
        (릴레이션 : 데이터들의 표(table) 형태로 표현하는 것)
    • 관계형 데이터 모델을 기초로 두고, 모든 데이터를 2차원 테이블 형태로 표현하는 DB
  • SQL에 의해 저장된다

    • 단, 정해진 스키마에 따라 데이터를 저장해야 한다
  • 어떤 테이블이 다른 테이블들과 관계를 맺고 모여있는 집합체

    • 이런 관계를 나타내기 위해 외래 키(Foreign Key) 를 사용
    • RDBMS 의 가장 큰 특징 : FK 를 이용한 테이블 간 Join 이 가능하다는 점

Databse
(일반적으로) 컴퓨터 시스템에 전자 방식으로 저장된 구조화된 정보 or 데이터의 체계적인 집합

DBMS (DataBase Management System)
사용자와 DB 사이에서 사용자의 요구에 따라 정보 생성 & DB 관리해 주는 소프트웨어

SQL (Strucured Query Language)

  • RDBMS(관계형 데이터베이스 관리 시스템)의 데이터를 관리하기 위해 설계된 특수 목적의 프로그래밍 언어
  • RDBMS 에서 자료의 검색/관리, 데이터베이스 스키마 생성/수정, 데이터베이스 객체 접근 조정 관리를 위해 고안

스키마

  • 데이터베이스의 구조와 제약 조건에 관한 전반적인 명세를 기술한 메타데이터의 집합
  • 스키마는 데이터베이스를 구성하는 데이터 개체(Entity), 속성(Attribute), 관계(Relationship) 및 데이터 조작 시 데이터 값들이 갖는 제약 조건 등에 관해 전반적으로 정의한다.

2. 장단점

장점

  • 정해진 스키마에 따라 데이터를 저장하기 때문에, 명확한 데이터 구조를 보장

  • 관계는 각 데이터를 중복없이 한 번만 저장 가능

단점

  • 테이블 간 관계를 맺고 있기 때문에, 시스템이 커질 경우 JOIN문이 많은 복잡한 쿼리가 만들어질 수 있다.

  • 성능 향상을 위해서는 서버의 성능을 향상 시켜야하는 Scale-up만을 지원

    • 따라서, 비용이 기하급수적으로 증가할 수 있음
  • 스키마로 인해 데이터가 유연하지 X

    • 추후에 스키마가 변경 될 경우 번거롭고 어렵다.

NoSQL (비관계형 DB)

1. 등장 배경

  1. 빅데이터의 등장으로 인해 데이터와 트래픽이 기하급수적으로 증가

  2. Scale-Up / Scale-Out ?

    • Scale-Up

      • 데이터 일관성에 유용
      • 단, 성능을 향상(RDBMS 의 단점)시키기 위해서는 장비가 좋아야 함 → 비용 多
    • Scale-Out

      • 여러 대의 데이터에 분산 저장 → RDBMS 의 단점 보완 + 비용 小

2. 정의

  • NoSQL (Not Only SQL)
    • RDB 형태의 관계형 데이터베이스가 아닌 다른 형태의 데이터 저장 기술을 의미
      • 다양한 형태의 저장 기숙 덕분에,
        • RDBMS 스키마에 맞추어 데이터를 관리해야 된다는 한계 극복
        • 수평적 확장성(Scale-out)을 쉽게 할 수 있음
  • (RDBMS 와는 달리) 테이블 간 관계를 정의하지 X
    • 데이터 테이블은 그냥 하나의 테이블일 뿐.
    • 테이블 간의 관계를 정의하지 않기 때문에, 일반적으로 테이블 간 Join 도 불가능

3. DB 특징

1) Key-Value Database

  • Key-Value Database 는 데이터가 Key와 Value의 쌍으로 저장된다.

    • Key : Value 에 접근하기 위한 용도로 사용
    • Value : 어떠한 형태의 데이터라도 담을 수 있음 (이미지나 비디오도 가능)

    따라서, 정형화되지 않은 데이터 저장에 유리

  • 분산 처리 및 저장 된다.

    따라서, 용량 大 데이터 저장에 유리

  • 간단한 API 를 제공하기 때문에, 속도가 굉장히 빠른 편

    • key 로 한 번에 접근 가능
      • 이는 Key-value 구조가 사실상 배열이기 때문에 가능한 일
  • 대표적인 NoSQL Key-Value Model

    • Redis
    • Riak
    • Amazon Dynamo DB

단, 메모리 사용량이 높은 단점

2) Document Database

  • Documnet Database 데이터는 Key 와 Document 의 형태로 저장된다.

    • (Key-Value 모델과 달리) Value 가 계층적인 형태인 Document 로 저장됨
      • 객체와 유사
      • 하나의 단위로 취급되어 저장됨 → 하나의 객체를 여러 개의 테이블에 나눠 저장할 필요가 없어짐
      • 객체를 Document의 형태로 바로 저장할 수 있으므로, 객체-관계 매핑이 필요하지 않음
  • 검색에 최적화되어 있음

    • Ket-Value 모델의 특징과 동일한 점!
  • 대표적인 NoSQL Document Model

    • MongoDB
    • CouthDB
  • 단, 사용이 번거롭고 쿼리가 SQL 과는 다르다.

    • Document 모델에서는 질의의 결과가 JSON 이나 xml 형태로 출력되기 때문에, 사용 방법이 RDBMS에서의 질의 결과를 사용하는 방법과 다르다.

3) Wide Column Database

  • Column-family Model 기반의 Database

    • (Key-Value 값을 이용한 1,2 모델들과 달리) Key 에서 필드를 결정
      • Key : Row(키 값)와 Column-family, Column-name 을 가진다.
        • 연관된 데이터들은 같은 Column-family 안에 속해 있으며, 각자의 Column-name을 가진다.
        • 질의는 Row, Column-family, Column-name 을 통해 수행된다.
  • 저장된 데이터는 하나의 커다란 테이블로 표현이 가능

  • 대표적인 NoSQL Column-family Model

    • HBase
    • Hypertable

4) Graph Database

  • 데이터를 Node 와 Edge, Property 와 함께 그래프 구조를 사용하여 데이터를 표현하고 저장하는 Database

    • 개체와 관계를 그래프 형태로 표현한 것 (관계형 모델이라고 할 수 있음)
  • 적합한 경우

    • 데이터 간의 관계가 탐색의 키일 경우
    • 페이스북이나 트위터 같은 소셜 네트워크에서(내 친구의 친구를 찾는 질의 등)
    • 연관된 데이터를 추천해주는 추천 엔진이나 패턴 인식 등의 데이터베이스로 적합
  • 대표적인 NoSQL Graph Model

    • Neo4J

2. 장단점

장점

  • 스키마가 없기 때문에, 유연하며 자유로운 데이터 구조를 가질 수 있다

    • 언제든 저장된 데이터를 조정하고 새로운 필드를 추가할 수 있다.
  • 데이터 분산이 용이

  • 성능 향상을 위한 Saclue-up 뿐만이 아닌 Scale-out 또한 가능

단점

  • 데이터 중복 발생 위험

    • 중복된 데이터가 변경 될 경우, 수정을 모든 컬렉션에서 수행을 해야 함
  • 스키마가 존재하지 않기 때문에, 명확한 데이터 구조를 보장하지 X

    • 데이터 구조 결정가 어려울 수 있다.

결론

RDBMS 는 언제 사용?

  • 데이터 구조가 명확하며 변경 될 여지가 없는 경우

  • 명확한 스키마가 중요한 경우

  • 관계를 맺고 있는 데이터가 자주 변경이 이루어지는 시스템의 경우

    • 중복된 데이터가 없어(데이터 무결성) 변경이 용이하기 때문

NoSQL 는 언제 사용?

  • 정확한 데이터 구조를 알 수 없는 경우

  • 데이터가 변경/확장이 될 수 있는 경우

  • 데이터 중복이 발생할 수 있는 경우

    • 중복된 데이터가 변경될 시에는 모든 컬렉션에서 수정을 해야 함
  • Update 가 많이 이루어지지 않는 시스템의 경우

  • 막대한 데이터를 저장해야 해서 Database 를 Scale-Out를 해야 되는 시스템의 경우


참고: [Database] RDBMS와 NoSQL의 차이점
참고: [DB기초] 스키마란 무엇인가?
참고: Key value 자료구조

profile
개발자로 거듭나기!

0개의 댓글