SQL
대표적인 관계형 데이터베이스
- 프로덕션 데이터베이스 : MySQL, PostgreSQL, Oracle
- OLTP (OnLine Transaction Processing)
- 빠른 속도에 집중. 서비스에 필요한 정보 저장
- 데이터 웨어하우스 : Redshift, Snowflake, BigQuery, Hive
- OLAP (OnLine Analytical Processing)
- 처리 데이터 크기에 집중. 데이터 분석 혹은 모델 빌딩등을 위한 데이터 저장
- 보통 프로덕션 데이터베이스를 복사해서 데이터 웨어하우스에 저장
- 서비스에 영향을 끼치지 않기 위해 프로덕션 db와 별개의 db를 사용
관계형 데이터베이스의 구조
RDB는 2단계로 구성된다.
- 데이터베이스라는 폴더 아래에
- 테이블이 파일처럼 저장된다.
프로덕션 db와 데이터 웨어하우스 모두 같은 구조로 이루어져있다.
SQL이 빅데이터 세상에서도 중요한 이유
- 구조화된 데이터를 다루는한 sql은 데이터 규모와 상관없이 쓰임
- 모든 대용량 데이터 웨어하우스는 sql 기반
- 스파크, 하둡도 예외는 아님 (sparkSQL과 hive라는 sql 언어가 지원됨)
SQL의 단점
- 구조화된 데이터를 다루는데 최적화가 되어있음
- 정규표현식을 통해 비구조화된 데이터를 어느 정도 다루는 것은 가능하나 제약이 심함
- 많은 rdb들이 플랫한 구조만 지원함 (no nested like json)
- 구글 빅쿼리는 nested structure를 지원함
- 비구조화된 데이터를 다루는데 스파크, 하둡과 같은 분산 컴퓨팅 환경이 필요해짐
- 즉 sql 만으로는 비구조화 데이터를 처리하지 못함
- rdb마다 sql 문법이 조금씩 상이함
Star Schema
- 프로덕션 db용 관계형 db에서는 보통 스타 스키마를 사용해 데이터를 저장
- 데이터를 논리적 단위로 나눠 저장하고 필요시 조인. 스토리지의 낭비가 덜하고 업데이트가 쉬움

출처 : databricks.com
Denormalized Schema
- 데이터 웨어하우스에서 사용하는 방식
- 단위 테이블로 나눠 저장하지 않음으로 별도의 조인이 필요 없는 형태
- 스토리지 용량을 더 사용하지만 조인이 필요 없기에 빠른 계산이 가능
- 업데이트가 어려움
데이터 웨어하우스
회사에 필요한 모든 데이터를 저장
- 여전히 sql 기반의 관계형 데이터베이스
- 프로덕션 데이터베이스와는 별도여야 함
- aws - redshift, gcp - bigquery, snowflake …
- 데이터 웨어하우스는 고객이 아닌 내부 직원을 위한 데이터베이스
- 처리 속도가 아닌 처리 데이터의 크기가 더 중요해짐
- ETL 혹은 데이터 파이프라인
- 외부에 존재하는 데이터를 읽고 데이터 웨어하우스로 저장해준다.
Redshift - Scalable SQL Engine
- 2PB 까지 지원
- still OLAP
- 응답속도가 빠르지 않기 때문에 프로덕션 데이터베이스로 사용 불가
- Columnar storage
- 레코드별로 저장하지 않고 컬럼별로 저장
- 컬럼별 압축이 가능
- 컬럼을 추가하거나 삭제하는 것이 아주 빠름
- chatGPT 컬럼형 스토리지는 다음과 같은 장점을 가지고 있습니다.
-
쿼리 성능 개선: 컬럼형 스토리지는 컬럼 단위로 데이터를 저장하기 때문에, 쿼리에서 사용되는 컬럼만 읽어오면 됩니다. 이는 쿼리 성능을 크게 향상시키는데 기여합니다. 또한, 데이터를 압축하여 저장하기도 쉽습니다.
-
집계 성능 개선: 컬럼형 스토리지는 집계 함수(예: SUM, AVG 등)를 처리할 때 높은 성능을 보입니다. 컬럼 단위로 데이터를 저장하기 때문에, 집계 함수를 적용하는 데 필요한 데이터만 읽어오면 됩니다.
-
스토리지 공간 절약: 컬럼형 스토리지는 같은 데이터 타입의 컬럼을 연속적으로 저장하기 때문에, 같은 값이 반복되는 경우에는 압축하여 저장할 수 있습니다. 이는 스토리지 공간을 절약하는 데 기여합니다.
컬럼형 스토리지는 데이터 웨어하우스와 비즈니스 인텔리전스(BI) 시스템에서 많이 사용됩니다. 이는 대용량의 데이터를 다루고, 복잡한 쿼리를 처리해야 하기 때문입니다.
- 벌크 업데이트 지원
- insert 커맨드로 저장할 수 있는 레코드의 수는 한계가 있음 → 대규모 데이터를 처리할 때 이상적이지 않음
- 레코드를 csv, json 형식의 파일로 만들어 s3로 복사 후 copy 커맨드로 redshift로 일괄 복사
- 이렇게 할 경우 백만개의 레코드도 1분안에 복사 가능
- 고정 용량/비용 sql 엔진
- vs. Snowflake vs. BigQuery
- primary key uniqueness를 보장하지 않음
- 데이터웨어하우스 sql 엔진들은 공통적으로 pk uniqueness를 지원하지 않음
- 이를 보장하기 위해서는 값이 저장될 때마다 pk uniqueness를 체크해야 함 → 시간 효율성과 pk uniqueness를 트레이드 오프
- 프로덕션 db들은 보장함
- 이를 보장하기 위해서는 데이터 엔지니어가 별도의 오퍼레이션을 수행해야 한다.
- Postgresql 8.x와 SQL이 호환됨
- 하지만 Postgresql 8.x의 모든 기능을 지원하지는 않음
- Postgresql 8.x를 지원하는 툴이나 라이브러리로 액세스 가능
- JDBC/ODBC
- Postgresql 8.x에 사용할 수 있는 툴, 라이브러리를 똑같이 redshift에 사용할 수 있다.
- SQL이 메인 언어라는 점 명심 🔥