목차
RDB, RDBMS
RDB(Relational Database)란 관계형 데이터 모델에 기초를 둔 데이터베이스 입니다. 관계형 데이터 모델이란 데이터를 구성하는데 필요한 방법 중 하나로 모든 데이터를 2차원의 테이블 형태(row, column)로 표현합니다.
관계형 데이터베이스는 다른 테이블과 관계를 맺고 모여있는 집합체로 이해할 수 있습니다. 이러한 관계를 나타내기 위해 외래 키(foreign key)라는 것을 사용하고 테이블 간 Join이 가능하다는게 RDBMS의 가장 큰 특징 입니다.
특징
- 테이블마다 스키마가 정의해야 합니다.
- 데이터는 정해진 데이터 스키마를 따라 데이터베이스 테이블에 Column, Row 형태로 저장됩니다.
- SQL 언어를 사용해 데이터를 다룹니다.
- 부하의 분산이 어렵다
- 데이터 타입과 제약(Constraint)를 통해 데이터의 정확성을 보증합니다.
- 정해진 스키마에 따라 데이터를 저장하기 때문에 명확한 데이터 구조를 보장하며, 각 데이터에 맞게 테이블을 나누어 중복을 피해 데이터 공간을 절약할 수 있습니다.
- 시스템 복잡도를 고려하여 구조화를 해야한다. 시스템이 복잡해질수록 SQL 문이 복잡해지고 성능이 저하되며, 수평적 확장이 어려워 수직적 확장을 대부분 하기 때문에 한계에 직면하게 됩니다.
- 일반적으로 수직적 확장(Scale Up)만 지원합니다. (하드웨어 고성능으로 교체)
정해진 스키마
데이터는 테이블에 Record로 저장되며 각 테이블에는 명확하게 정의된 구조가 있다.
- 여기에서 구조란 어떤 데이터가 테이블에 들어가고 어떤 데이터가 그렇지 않을지를 정의하는 필드 집합 입니다.
- Columns(Fields)에 맞지 않는 데이터는 추가할 수 없으며, 새로운 필드를 추가할 때 스키마를 뜯어 고치지 않는 이상 필드를 추가할 수 없습니다.
관계
위의 사진처럼 사용자가 구입한 상품을 나타내기 위해 각각의 테이블을 만들었지만, 각 테이블은 다른 테이블에 저장되지 않은 데이터만 가지고 있으며, Join을 사용하여 원하는 데이터를 완성시킵니다.
이런 명확한 구조는 장점이 있는데, 하나의 테이블에서 중복없이 하나의 데이터만 관리하기 때문에 다른 테이블에서 부정확한 데이터를 다룰 위험이 없습니다.
장점
1. 정해진 스키마에 따라 데이터를 저장하여야 하므로 명확한 데이터 구조를 보장합니다.
2. 각 데이터를 중복 없이 저장할 수 있습니다.
단점
1. 테이블 간 관계를 맺고 있어 시스템이 커질 경우 Join문이 많은 복잡한 쿼리가 만들어 질 수 있습니다.
2. 성능 향상을 위해 수직확장(Scale-up)만을 지원합니다. 이로 인해 비용이 기하급수적으로 커질 수 있습니다.
3. 스키마로 인해 데이터가 유연하지 못합니다. 나중에 스키마가 변경 될 경우 번거롭습니다.
RDBMS는 언제 사용하는 것이 좋을까요?
- 관계를 맺고 있는 데이터가 자주 변경되는 애플리케이션일 경우 (NoSQL이라면 여러 컬렉션을 모두 수정해야 합니다)
- 변경될 여지가 없고, 명확한 스키마가 사용자와 데이터에게 중요한 경우
질문
Q1. RDBMS 데이터 저장방식이 왜 수평확장을 어렵게 만드나요? RDBMS에서 수평확장 했을 때 생기는 문제점이 무엇인가요?
먼저, 수직 확장(scale-up), 수평 확장(scale-out)에 대해 알아보고 가겠습니다.
수직 확장(scale-up)
단순히 데이터베이스 서버의 성능을 향상시키는 것 입니다. 기존 시스템에 더 많은 전력(CPU, RAM)을 추가하여 확장하는 것을 의미합니다.
수평 확장(scale-out)
리소스 풀에 더 많은 시스템, 서버가 추가되어 데이터베이스가 전체적으로 분산됩니다. 따라서 하나의 데이터베이스에서 작동하지만 여러 호스트에서 작동하게 됩니다.
이해를 돕기 위한 표현들
수직 방향은 더 많은 자원을 기계에 추가하는 것 입니다. (하나의 큰 헐크가 모든 작업을 수행합니다.)
수평 방향은 더 많은 기계를 추가하는 것 입니다. (수천 명의 미니언이 함께 작업합니다.)
수직 확장은 쉽게 할 수 있지만, 서버의 하드웨어 사양은 결국 한계가 있습니다. (RAM, CPU를 무한히 꼽을 수 없습니다)
수평 확장은 하드웨어 기기의 대수를 늘리기만 하면 되서 한계가 없습니다. 그래서 주로 수평확장을 사용합니다. 대신 소프트웨어 한계가 복잡해집니다.
RDB와 수평확장
RDB가 왜 수평확장에 어려운가, 어떤 문제점이 있는가는 RDB의 수평확장 과정을 보면 알 수 있습니다.
RDB가 수평확장되면 다음과 같은 일이 벌어집니다.
수평확장이 이루어지면 디바이스는 2개가 되지만 각 디바이스에 하나의 데이터가 두 개로 분리되어 저장됩니다. 두 디바이스에 똑같은 데이터가 들어가면 수평확장의 의미가 없기 때문입니다. 수평확장을 실제 데이터로 보면 다음과 같습니다.
하나의 테이블이 두 개의 테이블로 나누어집니다. 어느 부분에서 자를지는 데이터를 관리하는 사람의 역량입니다.
위와 같이 분배되면 A디바이스에는 번호가 1,2번인 데이터가, B디바이스에는 3,4번 데이터가 들어갑니다.
여기에서 새로운 디바이스 C를 추가해보도록 하겠습니다.
C가 추가되면 새로운 규칙으로 데이터 구간을 잘라야 합니다. 그렇게 되면 범위-디바이스 테이블도 변경되어야 합니다.
사용자, 관계, 영상 테이블이 있습니다.
A 디바이스는 사용자 테이블의 1~2번 데이터, 관계 테이블의 1~2번 데이터, 영상 테이블의 1~2번 데이터를 다룹니다.
B 디바이스는 사용자 테이블의 3~4번 데이터, 관계 테이블의 3~4번 데이터를 다룹니다.
C 디바이스는 영상 테이블의 3~4번 데이터를 다룹니다.
위 그림은 단순히 사용자에 관한 테이블만 나타낸 것 입니다. 만일 사용자가 영상을 보았다 혹은 사용자가 영상을 올렸다와 같은 관계는 어떤 기준으로 나누어야 한다를 생각하면 복잡해지는 것입니다.
또 사용자는 A 디바이스에서 찾을 수 있는데 '사용자가 영상을 보았다' 와 같이 관계를 나타내는 데이터는 B 디바이스에 첮아야 한다면 머리가 아파집니다. 그리고 새롭게 추가된 영상이 C 디바이스에 있다면..?
특정 사용자에 대한 데이터 추출이 너무 어려워지고 최악의 경우 1번 사용자는 A 디바이스에 있는데 관계는 B 디바이스, 그 영샹은 C 디바이스에 있을 수도 있습니다.
위의 예시를 통해 우리는 관계가 복잡하고 데이터가 많아질수록 RDB는 수평 확장에 대한 관리가 한없이 복잡해진다 라는 것을 알 수 있습니다.
RDBMS는 특징은 테이블의 간의 관계를 맺음으로서 데이터를 관리한다는 것 입니다.
수평확장을 하면 테이블을 분산하므로 이로인해 관계가 더 복잡해지므로 RDBMS의 저장방식이 수평확장을 어렵게 합니다.
RDBMS에 수평확장을 하면 테이블의 데이터를 디바이스가 나누어서 접근하므로 원하는 데이터가 다른 디바이스에서 관리하고 있으면 관리가 한없이 복잡해진다는 문제점이 있습니다.
답변에 대한 피드백은 언제나 환영입니다...
Q2. 관계형 DBMS가 데이터의 분류, 정렬, 탐색 속도가 빠른 이유는 무엇인가요?
RDBMS는 인덱스(Index) 라는 자료구조를 사용해 DB 테이블에 대한 탐색 소도를 향상시킵니다.
테이블의 특정 컬렘(데이터)에 인덱스를 생성하면, 해당 컬럼의 데이터를 정렬한 후 별도의 메모리 공간에 데이터의 물리적 주소와 함께 저장합니다. (key, value)
RDBMS는 이 인덱스를 이용해 원하는 데이터를 빠르게 찾을 수 있습니다.
또한 데이터가 테이블의 행과 렬로 구조화 되어 있기 때문에 원하는 필드에 맞춰 데이터를 분류하거나 정렬할 수 있기 때문에 속도가 빠릅니다.
(피드백 필요...)
Q3. NoSQL이 최근 들어 다양한 곳에 쓰이고 있는데 관계형 DB를 대체할 수 있을까요? 이유는 무엇인가요?
질문의 답을 알기 위해 NoSQL에 대해 알아보겠습니다.
NoSQL
NoSQL(Not Only SQL 또는 Non relational Database)
특징
- RDBMS의 복잡도와 용량 한계의 문제점을 해결하기 위해 나왔으므로 대용량의 데이터를 저장할 수 있습니다.
- Table을 Collection 이라 하고, Record는 Documents라 합니다.
- Non relation 이란 말처럼 스키마도 없고 관계도 없습니다.
- 스키마가 없으니, 다른 구조의 데이터를 같은 컬렉션에 추가할 수 있습니다. 즉 관련된 데이터를 여러 컬렉션에 나눠 담지 않고 하나의 컬렉션에 저장할 수 있습니다. 따라서 Join을 할 필요 없이 모든 것을 갖춘 하나의 문서가 나올 수 있습니다.
- 단점은 중복이 발생하게 되면 Data에 대한 규격화된 결과값을 얻기 힘들어 집니다.
- 수평적 확장이 가능합니다.
- Key에 대한 put / get 만 지원합니다.
장점
1. 스키마가 없기 때문에 유연하며 자유로운 데이터 구조를 가질 수 있습니다.
2. 언제든 저장된 데이터를 조정하고 새로운 필드를 추가할 수 있습니다.
3. 데이터 분산에 용이하며 성능 향상을 위한 수직확장(Scale-up)뿐만 아니라 수평확장(Scale-out) 또한 가능합니다.
단점
1. 데이터 중복이 발생할 수 있으며 중복된 데이터가 변경 될 경우 수정을 모든 컬렉션에서 수행해야 합니다.
2. 스키마가 존재하지 않기에 명확한 데이터 구조를 보장하지 않으며 데이터 구조를 결정하기 어렵습니다.
NoSQL은 언제 사용하는 것이 좋을까요?
- 정확한 데이터 구조를 알 수 없거나 변경 / 확장 될 수 있는 경우
- 읽기(read) 처리는 자주하지만, 데이터를 자주 변경(update)하지 않는 경우 (즉, 한번의 변경으로 수십 개의 문서를 업데이트 할 필요가 없을 경우)
- 데이터베이스를 수평으로 확장해야 하는 경우 (막대한 양의 데이터를 다뤄야 하는 경우)
답변)
NoSQL이 최근 들어 다양한 곳에 쓰이고 있지만 관계형 DB를 대체할 수 없다고 생각합니다.
그 이유는 둘의 역할이 명확하게 다르기 때문입니다.
SQL은 스키마로 인해 데이터를 구조화해서 명확한 데이터 구조를 가지고 중복 없이 데이터를 저장합니다. 그러므로 관계를 맺고 있는 데이터가 자주 변경되는 곳에 활용됩니다. NoSQL은 수정을 하면 모든 컬렉션에서 이루어지니 어울리지 않습니다.
반면 NoSQL은 스키마가 없으므로 자유로운 데이터 구조를 가지고 한 컬렉션에 여러 데이터 구조를 담을 수 있습니다. SQL과 다른 특징은 자유로운 형식을 가지고 있는 것인데요. 이 때문에 NoSQL은 읽기를 자주하지만 데이터를 자주 변경하지 않는 경우나 정확한 데이터 구조를 알 수 없는 경우 대용량의 데이터를 다뤄야 하는 경우에 사용됩니다.
참조 사이트
https://toma0912.tistory.com/83
RDB, NoSQL, In-Memory DB 비교
안녕하세요. 오늘은 최근 많이 쓰이고 있는 데이터베이스 종류에 대해서 비교하는 포스팅을 하려고합니다. 대표적으로 분류하면 RDBMS, ORDBMS, NOSQL, NoSQL에 포함되어 있지만 In-Memory DB등이 있으며,
toma0912.tistory.com
RDB가 왜 수평확장이 어려운지 잘 설명되어 있습니다!
https://broccoli45.tistory.com/46?category=939148
빅데이터(BigData) 7부 - 수평확장(Scale Out)은 RDB보단 NoSQL이지!
이전 글에서 수직확장(Scale Up)과 수평확장(Scale Out)에 대해 알아보았다. 아직 못 본 사람들은 아래 링크에서 먼저 보고 오자! 빅데이터(BigData) 6부 - 수직확장(Scale Up)과 수평확장(Scale Out) 이전 글에
broccoli45.tistory.com
https://cntechsystems.tistory.com/20
Graph Database란?
Graph Database(GDB)란? 그래프 구조를 사용하여 데이터를 표현하고 저장하는 데이터베이스 관계형 데이터에비스를 보완하기위해 등장 데이터자체를 노드와 선인 그래프 형태로 저장하고 이를 시각
cntechsystems.tistory.com
NoSQL과 RDBMS 설명이 잘 되어 있습니다.
https://rutgo-letsgo.tistory.com/81
NoSQL vs RDBMS
Data Base 여러 사람들이 공유하고 사용할 목적으로 통합 관리되는 데이터들의 모임 SQL(Structured Query Language) 데이터 베이스에서 사용하는 쿼리 언어로 데이터를 검색, 저장, 수정, 삭제 등이 가능하
rutgo-letsgo.tistory.com
https://pythontoomuchinformation.tistory.com/528
RDBMS와 NoSQL의 차이점 및 장단점
들어가기 전에 DBMS DataBase Management System 사용자와 데이터베이스 사이에서 사용자의 요구에 따라 정보를 생성해 주고 데이터베이스를 관리해 주는 소프트웨어. SQL Strucured Query Language 관계형 데이
pythontoomuchinformation.tistory.com
https://thebook.io/006884/ch09/01-01/
게임 서버 프로그래밍 교과서: 9.1 수직 확장과 수평 확장 - 1
thebook.io