DuckDB

로컬 실행에 최적화된 임베디드 분석 OLAP 데이터베이스


핵심 개념

DuckDB는 SQLite의 OLAP 버전이라 할 수 있는 임베디드 분석 데이터베이스다. 서버 설치 없이 프로세스 내에서 실행되며, 컬럼나 스토리지와 벡터화 실행으로 분석 쿼리에 뛰어난 성능을 제공한다.

SQL 트랜스파일링을 통한 비용 절감

클라우드 웨어하우스(BigQuery, Snowflake 등)의 컴퓨트 비용을 줄이기 위해 DuckDB를 활용하는 패턴이 등장했다:

Quack Mode (Carbonfact/lea)

  1. 웨어하우스용 SQL을 SQLGlot으로 DuckDB 문법으로 트랜스파일
  2. 필요한 업스트림 테이블만 DuckDB로 풀(pull)
  3. 로컬에서 실행하여 DuckLake에 저장
  4. 필요 시 결과를 웨어하우스로 푸시백

DAG 분석 기반 하이브리드 실행

  • 외부 의존성(Fivetran 등)이 있는 루트 스크립트 → 웨어하우스에서 실행
  • 의존성이 풀된 스크립트 → 로컬 DuckDB에서 실행
  • SELECT * FROM table로 테이블 풀링 (매우 저렴)
  • 오케스트레이터가 DAG를 분석하여 자동 판단

DuckLake

DuckDB를 데이터 웨어하우스로 격상시키는 기능. S3/GCS/FUSE 파일시스템을 스토리지로 사용 가능.

성능과 비용 수치

항목수치
로컬 실행 컴퓨트 비용$0.00 (웨어하우스 대비)
예시 실행 시간4개 의존성 pull + 1 테이블 실행 = 5초
관리 가능 테이블 규모283개 스크립트 (lea 오케스트레이터)

한계와 적용 판단

  • 대용량 테이블 풀링: 100GB 이상 테이블을 DuckLake로 가져오는 데 시간 소요
  • 해결책 방향: Iceberg를 통한 제로카피 접근 (DuckDB가 최근 Iceberg 쓰기 지원 추가)
  • DuckDB가 부적합한 경우: 고동시성 OLTP, 테라바이트급 조인, 멀티유저 동시 쓰기
  • 적합한 경우: 개발/테스트 환경 쿼리, 단일 사용자 분석, CI 파이프라인 검증
  • MotherDuck: 로컬/클라우드 하이브리드 오케스트레이션 관리형 서비스
  • Greybeam: DuckDB 트랜스파일링을 서비스로 판매 중 (현재 Snowflake 지원)

SQLGlot mypyc 컴파일 — 5x 파싱 가속

DuckDB 트랜스파일링의 핵심 도구인 SQLGlot이 mypyc 컴파일로 대폭 성능 향상:

  • Python 코드를 C 확장으로 AOT 컴파일하여 파싱 속도 5배 향상
  • 커스텀 문자열 프리미티브(C 레벨)를 CPython에 기여하여 토크나이저 병목 해소
  • 순수 Python 코드를 유지하면서 성능을 얻는 점진적 최적화 접근

Full-Text Search (FTS) 확장

DuckDB의 FTS 확장으로 비정형 텍스트 데이터에 대한 전문 검색이 가능:

  • Okapi BM25 알고리즘 기반, stemming/stop words/accent stripping 지원
  • k₁ 파라미터로 용어 빈도 가중치, b 파라미터로 문서 길이 정규화 조절
  • PRAGMA create_fts_index 한 줄로 인덱스 생성
  • Elasticsearch/Postgres FTS 대비 기능 제한적이나 탐색적 분석에 충분
  • 향후 벡터 검색 확장도 기대

MySQL 통합 — AliSQL 분석 엔진

AliSQL이 MySQL의 Pluggable Storage Engine으로 DuckDB를 통합:

  • MySQL 프로토콜·구문 100% 유지, binlog 복제로 데이터 자동 동기화
  • InnoDB 대비 TPC-H SF100에서 최대 200배 분석 쿼리 성능 향상
  • 컬럼나 압축으로 스토리지 원본 대비 **~20%**만 사용
  • 배치 트랜잭션 리플레이로 30만 행/초 복제, 지연 제거
  • HTAP(Hybrid Transactional/Analytical Processing)의 경량 구현 사례

연관 개념


Source: Lower Warehouse Costs via DuckDB Transpilation, SQLGlot mypyc Compilation, Full-Text Search with DuckDB, When MySQL Meets DuckDB - AliSQL Columnar Engine