[데이터베이스] RDB와 NoSQL
Updated: Categories: CS다양한 데이터베이스 종류에 대해 알아보자
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개 이상의 테이블을 엮어 조회하는 연산
- 특정 컬럼(키값)을 기준으로 테이블을 통합
기본 문법
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, MemcacheDocument Store
: MongoDBWide Column Storage
: DynamoDB, Cassandra, HBaseSearch Engine
: ElasticSearch
MongoDB
- Document-Oriented DB
- BSON(Binary JSON) 형태로 저장
- 다양한 인덱스 지원
- B-Tree 구조로 되어있음
- memory mapped file으로 파일 엔진 DB
- 메모리 크기가 성능 좌우
Redis
- Key-value 형태
- 프로세스 기반 싱글스레드
- 인메모리 기반
- 속도가 매우 빠름
- 기본적으로 데이터를 디스크에 저장하지 않음
- 하지만 저장할 수도 있음
- String, Set, Sorted Set, Hash, List 자료구조 지원
- 캐싱에 자주 사용됨