[데이터베이스] RDB와 NoSQL

Updated: Categories:

다양한 데이터베이스 종류에 대해 알아보자

RDB

  • RDB(Relataional DataBase) : 관계형 데이터베이스 관리 시스템
  • RDBMS(Relataional DataBase Management System) : 관계형 데이터베이스
    • 둘 다 비슷한 뜻임
  • 관계형 데이터 모델에 기초를 둔 데이터베이스
    • 현실의 데이터를 관계라는 개념을 사용해 표현
    • ‘관계’가 가장 중요한 개념!
  • Oracle, MSSQL, MySQL, MariaDB 등이 있음

특징

  • SQL 질의 문법을 사용함
  • 장점
    • 정규화 및 관계를 통한 데이터의 무결성, 신뢰성을 보장함
    • 복잡한 형태의 쿼리로 원하는 데이터를 추출
  • 단점
    • 관계가 복잡하고, 스키마 수정이 어려움. 유연하지 못한 데이터.
    • 빅데이터에서 비효율적 -> 입력과 조회시 성능 저하


SQL

DDL (Data Definaition Language)

  • 데이터 포맷을 정의하는 언어
  • CREATE, DROP, ALTER, TRUNCATE(DELETE ALL)

DML (Data Manipulation Language)

  • 데이터의 CRUD를 수행하는 언어
  • SELECT, INSERT, UPDATE, DELETE

DCL (Data Control Language)

  • DB의 접근 권한을 부여하는 명령어
  • GRANT, REVOKE


Key

기본 종류

  • 후보키 (Candidate Key)
  • 기본키
  • 대체키
  • 외래키
  • 슈퍼키

MySQL

  • Primary Key
  • Foreign Key
  • Unique Key
  • index key


Join

  • 크게 6가지 종류가 있다
  • 2개 이상의 테이블을 엮어 조회하는 연산
  • 특정 컬럼(키값)을 기준으로 테이블을 통합

join2

join


기본 문법

SELECT 필드명
FROM 테이블명
[INNER/LEFT/RIGHT/CROSS] JOIN 테이블명 ON 기준설정(키값매핑)
WHERE 조건
  • 조인종류 옵션 선택 안하면 default로 inner join으로 수행됨
  • from 테이블이 base가 되는 테이블이다
  • where 조건은 from 테이블을 기준으로 수행됨

Inner Join

  • base 테이블과 join 테이블의 공통 부분만을 출력한다

Left/Right Join

  • Left 조인시 base 테이블을 기준으로 출력, join 테이블에 해당 키가 없다면 NULL로 채움
  • Right 조인시 join 테이블이 기준이 된다. (Left와 정반대로 동작)

Full(Outer) Join

  • MySQL에서는 Full 조인을 지원하지 않는다
  • 따라서 Left, Right 조인을 따로 한 결과를 합집합(union)으로 묶어버린다
[LEFT 조인한거]
UNION
[RIGHT 조인한거];

Cross Join

  • base 테이블과 join 테이블의 모든 조합을 출력
  • 각각 테이블 레코드 수가 M, N이라면 크로스 조인 결과는 M*N

Self Join

  • base 테이블과 join 테이블이 일치할 때.
  • 자기 자신을 가로로 두번 출력하는 것임


NoSQL이란?

  • Not Only SQL
  • 비관계형 데이터베이스
  • 빅데이터 처리시 RDBMS로만 트래픽을 감당하기 힘들경우에 사용
    • 데이터의 저장 + 조회에 특화됨

SQL vs NoSQL

  SQL NoSQL
용도 OLTP/OLAP 환경에서 사용 데이터 검색 및 비정형데이터 분석
모델 테이블로 정규화, 관계를 통한 데이터 무결성 유연하고 다양한 스키마, 비관계
서버확장 Scale up/out 또는 복제를 통해 확장 무제한 범위로 일관된 성능을 제공함
ACID 트랜잭션을 통해 유지됨 ACID 속성을 완화

종류

  • Key/Value : Redis, Memcache
  • Document Store : MongoDB
  • Wide Column Storage : DynamoDB, Cassandra, HBase
  • Search Engine : ElasticSearch


MongoDB

  • Document-Oriented DB
  • BSON(Binary JSON) 형태로 저장
  • 다양한 인덱스 지원
    • B-Tree 구조로 되어있음
  • memory mapped file으로 파일 엔진 DB
    • 메모리 크기가 성능 좌우


Redis

  • Key-value 형태
  • 프로세스 기반 싱글스레드
  • 인메모리 기반
    • 속도가 매우 빠름
    • 기본적으로 데이터를 디스크에 저장하지 않음
    • 하지만 저장할 수도 있음
  • String, Set, Sorted Set, Hash, List 자료구조 지원
    • 캐싱에 자주 사용됨