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)은 자주 이루어지지 않는 경우 
 
데이터 저장 모델
Table
Json document, key-value, 그래프 등
개발 목적
데이터 중복 감소
애자일, 확장가능성, 수정가능성
스키마
엄격한 데이터 구조
유연한 데이터 구조
확장
Scale-up
Scale-out
종류
Oracle, MySQL 등
MongoDB, Redis 등
적합 업무
- 데이터 무결성 및 일관성이 중요한 트랜잭션 업무 - 온라인에서 다양한 집계 및 통계를 분석하는 업무 - 복잡한 계산 및 실시간 데이터 정합성이 필요한 업무
- 오프라인에서 정형 및 비정형 데이터 분석 업무 - 초당 동시 처리가 중요한 업무 - 로그 및 이력 등의 단순 기록형 업무
성능
성능 향상을 위해서는 성능 최적화 작업이 필요
클러스터 크기, 네트워크 및 애플리케이션에 의해 성능이 결정됨
ref
Last updated