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 작업이 진행되는 동안 프로세스는 자신의 작업을 중단한채 대기하는 방식
수직적 확장(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