SQL, 데이터 웨어하우스

Minseok Kim·2023년 5월 8일
0

SQL

대표적인 관계형 데이터베이스

  • 프로덕션 데이터베이스 : MySQL, PostgreSQL, Oracle
    • OLTP (OnLine Transaction Processing)
    • 빠른 속도에 집중. 서비스에 필요한 정보 저장
  • 데이터 웨어하우스 : Redshift, Snowflake, BigQuery, Hive
    • OLAP (OnLine Analytical Processing)
    • 처리 데이터 크기에 집중. 데이터 분석 혹은 모델 빌딩등을 위한 데이터 저장
    • 보통 프로덕션 데이터베이스를 복사해서 데이터 웨어하우스에 저장
    • 서비스에 영향을 끼치지 않기 위해 프로덕션 db와 별개의 db를 사용

관계형 데이터베이스의 구조

RDB는 2단계로 구성된다.

  1. 데이터베이스라는 폴더 아래에
  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 …
      • 고정 비용 옵션 vs 가변 비용 옵션
  • 데이터 웨어하우스는 고객이 아닌 내부 직원을 위한 데이터베이스
    • 처리 속도가 아닌 처리 데이터의 크기가 더 중요해짐
  • ETL 혹은 데이터 파이프라인
    • 외부에 존재하는 데이터를 읽고 데이터 웨어하우스로 저장해준다.

Redshift - Scalable SQL Engine

  • 2PB 까지 지원
  • still OLAP
    • 응답속도가 빠르지 않기 때문에 프로덕션 데이터베이스로 사용 불가
  • Columnar storage
    • 레코드별로 저장하지 않고 컬럼별로 저장
    • 컬럼별 압축이 가능
    • 컬럼을 추가하거나 삭제하는 것이 아주 빠름
    • chatGPT 컬럼형 스토리지는 다음과 같은 장점을 가지고 있습니다.
      1. 쿼리 성능 개선: 컬럼형 스토리지는 컬럼 단위로 데이터를 저장하기 때문에, 쿼리에서 사용되는 컬럼만 읽어오면 됩니다. 이는 쿼리 성능을 크게 향상시키는데 기여합니다. 또한, 데이터를 압축하여 저장하기도 쉽습니다.

      2. 집계 성능 개선: 컬럼형 스토리지는 집계 함수(예: SUM, AVG 등)를 처리할 때 높은 성능을 보입니다. 컬럼 단위로 데이터를 저장하기 때문에, 집계 함수를 적용하는 데 필요한 데이터만 읽어오면 됩니다.

      3. 스토리지 공간 절약: 컬럼형 스토리지는 같은 데이터 타입의 컬럼을 연속적으로 저장하기 때문에, 같은 값이 반복되는 경우에는 압축하여 저장할 수 있습니다. 이는 스토리지 공간을 절약하는 데 기여합니다.

        컬럼형 스토리지는 데이터 웨어하우스와 비즈니스 인텔리전스(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의 모든 기능을 지원하지는 않음
      • 예를 들어 text 타입이 존재하지 않음
    • Postgresql 8.x를 지원하는 툴이나 라이브러리로 액세스 가능
      • JDBC/ODBC
      • Postgresql 8.x에 사용할 수 있는 툴, 라이브러리를 똑같이 redshift에 사용할 수 있다.
    • SQL이 메인 언어라는 점 명심 🔥
      • 그렇기에 테이블 디자인이 아주 중요

0개의 댓글