Hacker News인프라 · 데브옵스

DuckDB 2.0이 2~3배 빨라진 이유

원제 Why DuckDB 2.0 is faster

124 포인트댓글 43
Key Point

S3 쿼리가 2~3배 빨라지고 깊은 계층 구조 처리는 100배 이상 빨라지는 등 실제 데이터 파이프라인의 병목을 직접 해결하는 기능들이 핵심이다.

핵심 요약

  • DuckDB 2.0 알파가 출시됐으며, S3 쿼리, 깊은 계층 구조 처리, JSON 저장소에서 주요 성능 향상을 달성했다.
  • 비동기 I/O 기능: 별도 스레드 풀이 데이터를 미리 다운로드하면서 CPU와 네트워크를 동시에 활용하며, S3에서 2.2GB 파일 읽기가 18.8초에서 7.7초로 단축됐다.
  • read_ahead_depth 설정(기본값 -1)으로 자동 활성화되며, 이전 동작으로 돌리려면 0으로 설정하면 된다.
  • 재귀 CTE 개선: 이전에는 각 라운드마다 전체 테이블을 재읽었지만, 2.0은 한 번만 읽고 조회 인덱스를 생성해 깊은 계층 구조 처리 속도를 획기적으로 향상시켰다.
  • 20,000개 커밋의 git 이력을 역순으로 탐색하는 재귀 쿼리가 1.5.5에서는 1.8~16초 걸렸지만, 2.0에서는 0.10초로 단축됐다.
  • VARIANT 데이터 타입: JSON을 저장할 때 일관된 필드들은 별도 컬럼으로 '분할(shredding)'하고 불규칙한 부분만 바이너리로 유지해, 저장소 크기가 JSON 문자열 기준 2.7배 감소했다.
  • 구조화된 로그 같이 필드가 일관된 경우 VARIANT 저장소가 JSON보다 78배 빠르고, 필터링 및 합계 쿼리는 일반 컬럼과 20% 수준의 성능 차이를 보인다.
  • 트리거: 행 변경 시 이전·이후 상태(전환 테이블)에 접근해 이력 관리를 데이터베이스 측에서 자동화할 수 있다.
  • 중첩 스키마(CREATE SCHEMA finance.reports), CTE 내 DML(DELETE...RETURNING), Spark SQL 호환 모드 등 추가 기능을 지원한다.
  • 외부 파일 캐시 스필링(external_file_cache_spill): 메모리 부족 시 원격 파일 블록을 다시 다운로드 대신 임시 디렉토리에 저장해, 300MB 제한에서 854MB 파일 두 번째 읽기가 23.9초에서 0.35초로 단축됐다.
  • CLI에 SQL 포맷터, 쿼리 가능한 히스토리, read_json의 ISO-8601 타임스탬프 자동 감지 등을 추가했다.
  • 클라이언트-서버 프로토콜인 Quack이 1.0으로 출시되며, 설치 페이지에서 다양한 클라이언트를 지원한다.
AI 요약 안내

AI가 한국어로 정리한 내용입니다. 정확한 정보는 원문을 확인해 주세요.

요약 원칙 ↗