
4.4 데이터베이스의 종류
4.4.1 관계형 데이터베이스
관계형 데이터베이스는 행과 열을 가지는 표 형식 데이터를 저장하는 형태의 데이터베이스를 가리키며 SQL 이라는 언어를 써서 조작한다. MySQL, PostgreSQL, 오라클, SQL Server 등이 있다.
MySQL
MySQL은 대부분의 운영체제와 호환되며 현재 가장 많이 사용하는 데이터베이스이다.
- C, C++로 만들어짐
- MyISAM 인덱스 압축 기술, B-트리 기반의 인덱스, 스레드 기반의 메모리 할당 시스템, 매우 빠른 조인, 최대 64개 인덱스 제공
- 대용량 데이터베이스를 위해 설계
- 롤백, 커밋, 이중 암포 지원 보안 등의 기능 제공

스토리지 엔진 : 데이터베이스의 심장 역할
- 모듈식 아키텍처로 쉽게 스토리지 엔진을 바꿀 수 있으며, 데이터 웨어 하우징, 트랜잭션 처리, 고가용성 처리에 강점
- 스토리지 엔진 위에 커넥터 API 및 서비스 계층을 통해 MySQL 데이터베이스와 쉽게 상호 작용
- 쿼리 캐시를 지원해 입력된 쿼리 문에 대한 전체 결과 집합을 저장하기 때문에 사용자가 작성한 쿼리가 캐시에 있는 쿼리와 동일하면 서버는 단순히 구문 분석, 최적화 및 실행을 건너뛰고 캐시의 출력만 표시
PostgreSQL
MySQL 다음으로 개발자들이 선호하는 데이터베이스 기술
- VACUUM : 디스크 조각이 차지하는 영역을 회수할 수 있음
- 최대 테이블 크기 : 32TB
- SQL 뿐만 아니라 JSON 이용해 데이터에 접근 가능
- 지정 시간 복구 기능, 로킹, 접근 제어, 중첩된 트랜잭션, 백업 등
4.4.2 NoSQL 데이터베이스
NoSQL(Not Only SQL) 데이터베이스란 SQL을 사용하지 않는 데이터베이스를 말한다.
- 전통적인 RDBMS와 다른 DBMS를 지칭하기 위한 용어로 데이터 저장에 고정된 테이블 스키마가 필요하지 않고 조인 연산 사용 불가능
- 수평적으로 확장 가능
ex.MongoDB, redis 등
MongoDB
JSON을 통해 데이터 접근 가능하며 Binary JSON 형태(BSON)로 데이터가 저장된다.
- 와이어드타이거 엔진이 기본 스토리지 엔진으로 장착된 키-값 데이터 모델에서 확장된 도큐먼트 기반의 데이터베이스
- 확장성과 빅데이터 저장할 때 성능이 좋다
- 고가용성, 샤딩, 레플리카셋 지원
- 스키마를 정해 놓지 않고 데이터를 삽입할 수 있어 다양한 도메인의 데이터베이스를 기반으로 분석하거나 로깅 등을 구현할 때 강점이다.
- 도큐먼트를 생성할 때마다 다른 컬렉션에서 중복된 값을 지니기 힘든 유니크한 값인 ObjectID가 생성
- 기본키로 유닉스 시간 기반의 타임스탬프(4바이트), 랜덤 값(5바이트), 카운터(3바이트)로 이루어짐
Redis
인메모리 데이터베이스이자 키-값 데이터 모델 기반의 데이터베이스
- 기본적인 데이터 타입 : 문자열(string)
- 최대 512MB까지 저장
- 이 외에도 셋(set), 해시(hash) 등 지원
- pub/sub 기능을 통해 채팅 시스템, 다른 데이터베이스 앞단에 두어 사용하는 캐싱 계층, 단순한 키-값이 필요한 세션 정보 관리, 정렬된 셋(sorted set) 자료 구조를 이용한 실시한 순위표 서비스에 사용한다.