출처 - https://github.com/jmxx219/CS-Study (opens in a new tab)
RDB와 NoSQL
DB와 DBMS
Database
- 체계화된 데이터의 집합
- 여러 응용 시스템들의 통합된 정보를 저장하여 운영할 수 있는 공용 데이터의 묶음
- 검색/갱신 등의 데이터 관리를 효율화함
DBMS(Database Management System)
- 사용자와 데이터베이스 사이에서 사용자의 요구에 따라 정보를 생성해주고 데이터베이스를 관리해주는 소프르웨어
SQL(Structured Query Language)
- 관계형 데이터베이스 관리 시스템의 데이터를 관라하기 위해 사용되는 표준 프로그래밍 언어
- 데이터베이스와 관련된 모든 작업을 위해 사용됨
- 데이터베이스 스키마 생성 및 수정, 테이블 관리, 데이터 추가, 수정, 삭제, 조회 등
Schema
- 데이터베이스를 구성하는
개체(Entity)
,속성(Attribute)
,관계(Relationship)
및제약조건
등에 관해 전반적인 명세를 기술한 메타데이터의 집합 - 참고 (opens in a new tab)
- 데이터베이스를 구성하는
데이터 요청
CPU가 RAM에 데이터를 요청할 때
- RAM에 적재되어 있는 데이터를 가져올 경우, I/O가 발생 X
- 하드디스크에서 데이터를 가져올 경우, I/O 발생
- 페이지 교체 발생 -> 속도 떨어짐
- Blocking I/O: I/O 작업이 진행되는 동안 프로세스는 자신의 작업을 중단한채 대기하는 방식
DB 서버의 확장성(Scaling) (opens in a new tab)
- 수직적 확장(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 (opens in a new tab)을 지원하여 데이터의 중복을 제거하고 데이터의 일관성을 보장
- 관계형 데이터 모델을 기초로 두고, 모든 데이터를 2차원 테이블 형태로 표현하는 데이터베이스
- 장점
- 정해진 스키마에 따라 저장하기 때문에 명확한 데이터 구조가 보장됨
- 오래 사용된 만큼 신뢰성이 높고, 어떤 상황에서도 데이터의 무결성을 보장함
관계
를 이용하여 각 데이터를 중복 없이 한 번만 저장 가능- 유지보수 편리
- 단점
- 작성된 스키마를 수정하기 어려움
- 데이터가 유연하지 못하고, 스카마가 변경되는 경우 데이터 구조의 변경이 어려움
- 테이블 간의 관계가 복잡해 시스템이 커질 경우 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
- Key-Value Model
-
사용
- 정확한 데이터 구조가 정해지지 않거나, 변경 및 확장이 될 수 있는 경우
- 데이터 양이 매우 많은 경우(막대한 양의 데이터를 다뤄야하는 경우)
- 데이터 읽기를 자주 하지만, 변경은 자주 이루어지지 않는 경우
-
용어
Documents(문서)
- 레코드라고 부름
Json
과 비슷한 형태로, 관련 데이터를 동일한컬렉션
에 넣음- 여러 테이블을 조인할 필요 없이 이미 필요한 모든 것을 갖춘 문서
RDB(SQL) VS NoSQL
적합성
- RDB 사용이 더 적합한 경우
- 관계를 맺고 있는 데이터가 자주 변경되는 경우
- 스키마의 변경이 없는 경우
- NoSQL 사용이 더 적합한 경우
- 정확한 데이터 구조가 정해지지 않거나, 변경 및 확장이 될 수 있는 경우
- 데이터베이스를 수평으로 확장해야 하는 경우 (막대한 양의 데이터를 다뤄야하는 경우)
- 데이터 읽기(read)를 자주 하지만, 변경(update)은 자주 이루어지지 않는 경우
RDB(SQL) | NoSQL | |
---|---|---|
데이터 저장 모델 | Table | Json document, key-value, 그래프 등 |
개발 목적 | 데이터 중복 감소 | 애자일, 확장가능성, 수정가능성 |
스키마 | 엄격한 데이터 구조 | 유연한 데이터 구조 |
확장 | Scale-up | Scale-out |
종류 | Oracle, MySQL 등 | MongoDB, Redis 등 |
적합 업무 | - 데이터 무결성 및 일관성이 중요한 트랜잭션 업무 - 온라인에서 다양한 집계 및 통계를 분석하는 업무 - 복잡한 계산 및 실시간 데이터 정합성이 필요한 업무 | - 오프라인에서 정형 및 비정형 데이터 분석 업무 - 초당 동시 처리가 중요한 업무 - 로그 및 이력 등의 단순 기록형 업무 |
성능 | 성능 향상을 위해서는 성능 최적화 작업이 필요 | 클러스터 크기, 네트워크 및 애플리케이션에 의해 성능이 결정됨 |