RDB와 NoSQL

DB와 DBMS

  • Database

    • 체계화된 데이터의 집합

    • 여러 응용 시스템들의 통합된 정보를 저장하여 운영할 수 있는 공용 데이터의 묶음

    • 검색/갱신 등의 데이터 관리를 효율화함

  • DBMS(Database Management System)

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

  • SQL(Structured Query Language)

    • 관계형 데이터베이스 관리 시스템의 데이터를 관라하기 위해 사용되는 표준 프로그래밍 언어

    • 데이터베이스와 관련된 모든 작업을 위해 사용됨

      • 데이터베이스 스키마 생성 및 수정, 테이블 관리, 데이터 추가, 수정, 삭제, 조회 등

  • Schema

    • 데이터베이스를 구성하는 개체(Entity), 속성(Attribute), 관계(Relationship)제약조건 등에 관해 전반적인 명세를 기술한 메타데이터의 집합

데이터 요청

CPU가 RAM에 데이터를 요청할 때

  • RAM에 적재되어 있는 데이터를 가져올 경우, I/O가 발생 X

  • 하드디스크에서 데이터를 가져올 경우, I/O 발생

    • 페이지 교체 발생 -> 속도 떨어짐

    • Blocking I/O: I/O 작업이 진행되는 동안 프로세스는 자신의 작업을 중단한채 대기하는 방식

DB 서버의 확장성(Scaling)

  • 수직적 확장(Scale-up)

    • 컴퓨터의 성능을 업그레이드 하는 방법

      • 단순히 데이터베이스의 성능을 향상 시키는 것

    • 데이터라 분산되지 않기 때문에 동기화가 필요없어 데이터 일관성이 유지됨

    • RAM의 공간에 한계가 있어 결국에 하드웨어에서 데이터를 가져옴

      • 이 과정에서 I/O가 일어나 데이터 읽기에서 성능이 떨어짐

  • 수평적 확장(Scale-out)

    • 컴퓨터를 여러 대 사용하여 분산시키는 방법

      • 더 많은 서버가 추가되고 DB가 전체적으로 분산됨

      • 하나의 데이터베이스에서 작동하지만 여러 호스트에서 작동

    • 데이터 복제

DB 분류

  • 키-값 DB: 키와 값으로 구성된 배열구조의 DB로 NoSQL DB 중 가장 단순한 구조

  • 도큐먼트 DB: 필드와 값의 형태로 구성된 데이터를 JSON 포맷으로 관리하는 DB로 NoSQL DB 중 가장 많이 사용되는 구조

  • 컬럼 패밀리 DB: 컬럼과 로우로 구성된 DB로 컬럼은 이름과 값으로 구성되고 로우는 각기 다른 컬럼으로 구성이 가능함

  • 그래프 DB: 노드와 관계로 구성된 DB로 근접한 객체를 모델링할 목적으로 설계됨

RDB(Relational Database)

  • 개념

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

      • 테이블 간에는 외래키(FK)를 사용하여 서로 다른 테이블과 관계를 맺고 있음

    • 정형화된 정보를 저장하고 접근하는데 가장 효율적이고 유연한 데이터베이스 모델

    • RDBMS(Relational DBMS)

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

      • 데이터베이스를 이루는 객체들의 릴레이션을 통해 데이터를 저장

      • SQL을 이용하여 데이터의 저장, 수정, 삭제, 검색 가능

    • ACID와 Transaction을 지원하여 데이터의 중복을 제거하고 데이터의 일관성을 보장

  • 장점

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

    • 오래 사용된 만큼 신뢰성이 높고, 어떤 상황에서도 데이터의 무결성을 보장함

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

    • 유지보수 편리

  • 단점

    • 작성된 스키마를 수정하기 어려움

      • 데이터가 유연하지 못하고, 스카마가 변경되는 경우 데이터 구조의 변경이 어려움

    • 테이블 간의 관계가 복잡해 시스템이 커질 경우 JOIN문이 많은 복잡한 쿼리가 만들어질 수 있음

    • 성능 향상을 위해서는 수직적 확장(Scale-up)만을 지원해 비용이 기하급수적으로 늘어날 수 있음

    • 다른 DB에 비해 많은 자원이 활용되어 시스템 부하가 높음

  • 사용

    • 데이터 구조가 변경될 여지가 없고, 명확한 스키마가 경우

    • 관계를 맺고 있는 데이터가 자주 변경되는 애플리케이션의 경우

  • 용어

    • Relation(릴레이션): Entity, Table

      • Tuple(튜플): 관계된 데이터의 묶음으로, 테이블의 행을 의미

      • Attribute(속성): 데이터의 항목/필드를 의미

NoSQL(Not Only SQL)

  • 개념

    • 비관계형 데이터베이스로 RDB에 비해 자유로운 형태로 데이터를 저장

    • 데이터 간의 관계를 정의하지 않고, 스키마 없이 사용하거나 느슨한 스키마를 제공

    • 대량의 분산된 데이터를 저장하고 조회하는데 특화

  • 장점

    • 유연하고 자유로운 데이터 구조

      • 저장된 데이터를 조정하고 새로운 필드를 추가하는데에 자유로움

      • 데이터는 애플리케이션이 필요로 하는 형식으로 저장

    • 성능 향상 방법으로 수직적 확장(Scale-up) 가능, 수평적 확장(Scale-out)에 용이

    • 대용량 데이터 처리에 효과적이고, 분산처리와 병렬 처리 가능

  • 단점

    • 데이터 중복 발생 가능

      • 여러 컬렉션에 중복 데이터가 많아 데이터 변경 시, 모든 컬렉션에서 수정 필요

    • 명확한 데이터 구조를 보장하지 않음

  • 종류

    • Key-Value Model

      • Key-Value 방식으로 저장

      • 고속 읽기와 쓰기에 최적화

      • ex) Redis, DynamoDB 등

    • Document Model

      • Key-Document 방식으로 저장

      • Document는 계층적 데이터 타입(JSON, XML)으로 저장

      • ex) MongoDB 등

    • Column Model, Graph Model

  • 사용

    • 정확한 데이터 구조가 정해지지 않거나, 변경 및 확장이 될 수 있는 경우

    • 데이터 양이 매우 많은 경우(막대한 양의 데이터를 다뤄야하는 경우)

    • 데이터 읽기를 자주 하지만, 변경은 자주 이루어지지 않는 경우

  • 용어

    • Documents(문서)

      • 레코드라고 부름

      • Json과 비슷한 형태로, 관련 데이터를 동일한 컬렉션에 넣음

      • 여러 테이블을 조인할 필요 없이 이미 필요한 모든 것을 갖춘 문서

RDB(SQL) VS NoSQL

적합성

  • RDB 사용이 더 적합한 경우

    • 관계를 맺고 있는 데이터가 자주 변경되는 경우

    • 스키마의 변경이 없는 경우

  • NoSQL 사용이 더 적합한 경우

    • 정확한 데이터 구조가 정해지지 않거나, 변경 및 확장이 될 수 있는 경우

    • 데이터베이스를 수평으로 확장해야 하는 경우 (막대한 양의 데이터를 다뤄야하는 경우)

    • 데이터 읽기(read)를 자주 하지만, 변경(update)은 자주 이루어지지 않는 경우


ref

Last updated