관계형데이터베이스
- 구조화된 데이터를 저장하고 질의할 수 있도록 해주는 스토리지
- 관계형 데이터베이스를 조작하는 프로그래밍 언어가 SQL
- DDL
- Create, Alter, Drop, Truncate, Rename
- DML
- Select, Insert, Update, Delete
대표적인 관계형 데이터베이스
프로덕션 데이터베이스
- MySQL, PostgreSQL, Oracle, …
- OLTP (OnLine Transaction Processing)
- 빠른 속도에 집중, 서비스에 필요한 정보 저장
데이터웨어하우스
- Redshift, Snowflake, BigQuery, Hive, …
- OLAP (OnLinne Analytical Processing)
- 처리 데이터 크기에 집중
- 데이터 분석 혹은 모델 빌딩 등을 위한 데이터 저장
- 프로덕션 데이터베이스를 복사해서 데이터 웨어하우스에 저장
SQL
Structure Query Language
관계형 데이터베이스에 있는 데이터를 질의하거나 조작해주는 언어
1970년대 초반 IBM이 개발한 구조화된 데이터 질의 언어
SQL의 단점
- 구조화된 데이터를 다루는데 최적화가 되어있다.
- 정규표현식을 통해 비구조화된 데이터를 어느 정도 다루는 것은 가능하나 제약이 있다.
- 많은 관계형 데이터벵리스들이 플랫한 구조만 지원한다. (JSON처러 nested된 구조 지원 x)
- 구글 빅쿼리는 nested structure를 지원한다.
- 비구조화된 데이터를 다루는데 Spark, Hadoop과 같은 분산 컴퓨팅 환경이 필요해졌다.
Star Schema
- Production DB용 관계형데이터베이스에서는 보통 스타 스키마를 사용해 데이터를 저장
- 데이터를 논리적 단위로 저장하고 필요시 조인한다.
- 스토리지 낭비가 덜하고 업데이트가 쉽다.
Denormalized Schema
- 데이터웨어하우스에서 사용하는 방식이다.
- 단위 테이블로 나눠 저장하지 않음으로 별도의 조인이 필요없는 형태이다.
- 스토리지를 더 사용하지만 조인이 필요 없어 빠른 계산이 가능하다.
데이터웨어하우스
- 회사에 필요한 모든 데이터를 저장
- 여전히 SQL 기반의 관계형 데이터베이스이다.
- Redshift < BigQuery, Snowflake (scalable)
- 처리속도가 별로 중요하지는 않다.
- 서비스되는게 아니고, 내부에서만 사용할 것이기 때문
- ETL(Extract, Transform, Load), 데이터 파이프라인
- 외부에 존재하는 데이터를 읽어서 데이터 웨어하우스에 저장하는 것
데이터 인프라

Redshift
- Scalable SQL 엔진
- 2PB까지 지원한다.
- OLAP
- 응답속도가 빠르지 않아서 프로덕션 데이터베이스로 사용할 수 없다.
- Columnar Storage
- 컬럼별 압축이 가능하다.
- 컬럼을 추가하거나 삭제하는 것이 빠르다.
- 벌크 업데이트 지원
- 레코드가 들어있는 파일을 S3로 복사 후 COPY 커맨드로 Redshift로 일괄 복사
- 레코드 바이 레코드로 insert하면 시간이 많이 걸린다.
- 고정 용량, 고정 비용
- Snowflake, BigQuery는 가변 용량, 가변 비용
- primary key uniqueness를 보장하지 않는다.
- 레코드를 저장할 때 마다 unique한지 확인해야한다.
- 시간이 많이 걸린다.
- Postgresql 8.x와 SQL이 호환된다.
- Postgresql 8.x를 지원하는 툴이나 라이브러리로 액세스 할 수 있다.