본문 바로가기
IT/DB

SQL OLAP 데이터베이스 DuckDB 그리고 SQLite와 비교

by eplus 2025. 6. 2.

DuckDB는 경량화된 컬럼지향 SQL OLAP 데이터베이스로, Pandas처럼 메모리에서 빠르게 분석 쿼리를 처리할 수 있도록 설계된 DB입니다.

간단 요약:

  • **OLAP(분석용)**에 최적화
  • SQLite처럼 내장형 → 별도 서버 없이 실행 가능
  • 컬럼 기반 저장 → 대용량 데이터 집계에 빠름
  • Python, R, C++, JavaScript 등에서 직접 사용 가능
  • Pandas, Arrow, Parquet, CSV 등과 연동 쉬움

주요 특징:

형태 파일 기반 / 임베디드 (서버리스)
쿼리 언어 표준 SQL
성능 대규모 데이터 분석(OLAP)에 특화
저장 컬럼 저장 방식 (Columnar Format)
통합성 Pandas, NumPy, Parquet, Arrow와 즉시 연동 가능
유즈케이스 대용량 CSV 분석, Pandas 병목 해결, Notebook 분석

 

예시:

import duckdb
import pandas as pd

df = pd.read_csv("big_data.csv")

# Pandas와 DuckDB 연동
result = duckdb.query("SELECT column1, COUNT(*) FROM df GROUP BY column1").to_df()
print(result)

 

장점:

  • 설치 간편 (pip install duckdb)
  • 데이터 과학자/분석가에게 적합
  • Pandas보다 큰 데이터 처리 가능
  • 빠른 집계/조인 처리

 

SQLite 와의 차이점 및 비교

DuckDB와 SQLite는 둘 다 가볍고 서버 없이 작동하는 내장형 데이터베이스이지만, 목적과 구조가 다릅니다.


🆚 DuckDB vs SQLite 핵심 차이

항목DuckDBSQLite
목적 OLAP (분석) OLTP (트랜잭션)
저장 방식 컬럼 기반 (Columnar) 로우 기반 (Row-based)
성능 대량 데이터 집계/쿼리에 빠름 단건 트랜잭션에 유리
인덱스 자동 최적화, 인덱스 없음 B-Tree 인덱스 있음
사용 대상 데이터 과학자, 분석가 모바일 앱, 임베디드 시스템
멀티 스레딩 지원 (병렬 쿼리 처리) 단일 쓰레드
지원 포맷 Parquet, Arrow, Pandas 직접 연동 CSV, JSON (간접 연동)
SQL 호환성 고급 SQL 지원 (윈도우 함수 등) 표준 SQL 일부만 지원
 

요약:

  • SQLite = 빠른 읽기/쓰기, 모바일/IoT에 적합 (작고 안정적)
  • DuckDB = 대규모 분석 쿼리, Pandas보다 빠른 데이터 처리 가능

용도 추천:

상황추천 DB
안드로이드 앱의 설정 저장 ✅ SQLite
Kivy 앱에서 소규모 로컬 DB ✅ SQLite
수백 MB 이상 CSV 분석 ✅ DuckDB
Pandas 대체 SQL 분석 ✅ DuckDB

 

다음은 SQLite vs DuckDB 성능 비교 예제입니다.
CSV 파일(예: 100만 건 이상)에서 집계 쿼리 처리 속도를 비교합니다.


📁 데이터 준비 (sample.csv 예시)

csv
복사편집
id,category,amount 1,A,100 2,B,150 3,A,200 ... 1000000,C,300

✅ SQLite 예제

import sqlite3
import pandas as pd
import time

df = pd.read_csv("sample.csv")

# SQLite DB 생성 및 데이터 삽입
conn = sqlite3.connect(":memory:")
df.to_sql("data", conn, index=False, if_exists="replace")

start = time.time()
res = conn.execute("SELECT category, SUM(amount) FROM data GROUP BY category").fetchall()
print("SQLite 결과:", res)
print("SQLite 시간:", time.time() - start)

✅ DuckDB 예제

 

import duckdb
import pandas as pd
import time

df = pd.read_csv("sample.csv")

start = time.time()
res = duckdb.query("SELECT category, SUM(amount) FROM df GROUP BY category").fetchall()
print("DuckDB 결과:", res)
print("DuckDB 시간:", time.time() - start)


📊 비교 결과 (100만 행 기준, PC 환경)

항목SQLiteDuckDB
실행시간 약 1.5~2초 약 0.2~0.5초
병렬처리
컬럼 접근 느림 빠름
Pandas 연동 별도 변환 필요 바로 가능
728x90
반응형

'IT > DB' 카테고리의 다른 글

DB2를 SQL-SERVER로  (1) 2024.10.18
ORACLE SEQUENCE  (0) 2024.10.18
ORACLE에서 SELECT 시 LOCK 처리  (0) 2024.10.18
DATETIME 필드에 값 넣기  (0) 2024.10.18
SQL-SERVER 간단 TIP  (0) 2024.10.18