DuckDB: Python Dünyasının Gizli Gücü
Python ekosisteminde veri analizi denildiğinde çoğu geliştiricinin aklına ilk olarak Pandas, NumPy, Polars veya Apache Spark gelir. Ancak son birkaç yılda veri mühendisleri, veri bilimcileri ve yapay zekâ ekipleri arasında hızla popülerleşen başka bir teknoloji bulunuyor: DuckDB.
DuckDB, birçok kişinin tanımladığı şekliyle:
"Analitik işlemler için SQLite"
olarak düşünülebilir. Ancak bu tanım DuckDB'nin gerçek gücünü anlatmak için yeterli değildir.
DuckDB günümüzde Python tabanlı veri işleme, ETL süreçleri, yapay zekâ veri hazırlama, lakehouse mimarileri ve büyük Parquet dosyalarının analizinde en önemli araçlardan biri haline gelmiştir.
DuckDB Nedir?
DuckDB açık kaynak kodlu, gömülü (embedded), kolon bazlı çalışan bir OLAP (Online Analytical Processing) veritabanıdır.
Temel amacı:
- Büyük veri setlerini analiz etmek
- Karmaşık SQL sorgularını çalıştırmak
- Veri ambarı performansını tek makinede sunmak
- Sunucu kurmadan çalışmak
şeklinde özetlenebilir.
SQLite ile Farkı Nedir?
Birçok geliştirici DuckDB'yi SQLite ile karıştırır.
Aslında ikisi tamamen farklı problemleri çözmektedir.
| Özellik | SQLite | DuckDB |
|---|---|---|
| Amaç | OLTP | OLAP |
| Veri Yapısı | Satır Bazlı | Kolon Bazlı |
| Kullanım | Web Uygulamaları | Analitik |
| INSERT Performansı | Çok İyi | Orta |
| Analitik Sorgular | Zayıf | Çok Güçlü |
| Aggregation | Yavaş | Çok Hızlı |
| GROUP BY | Orta | Çok Hızlı |
| JOIN | Orta | Çok Hızlı |
DuckDB özellikle milyonlarca hatta milyarlarca satır üzerinde yapılan:
- SUM
- AVG
- COUNT
- GROUP BY
- WINDOW FUNCTIONS
işlemlerinde öne çıkar.
DuckDB Neden Bu Kadar Hızlı?
DuckDB'nin başarısının arkasında üç temel teknoloji vardır.
1. Kolon Bazlı Saklama
Geleneksel veritabanlarında veriler satır satır saklanır.
Örnek:
ID | Name | Salary
1 | Ali | 50000
2 | Ayşe | 70000
DuckDB ise kolonları ayrı ayrı saklar:
ID:
1
2
Name:
Ali
Ayşe
Salary:
50000
70000
Bu sayede sadece ihtiyaç duyulan kolonlar okunur.
Örneğin:
SELECT AVG(Salary)
FROM Employees;
sorgusunda Name kolonu hiç okunmaz.
Bu yaklaşım büyük performans kazancı sağlar.
2. Vectorized Execution
DuckDB satır satır çalışmaz.
Onun yerine verileri bloklar halinde işler.
Örneğin:
1000 satır
↓
1000 satır
↓
1000 satır
şeklinde CPU önbelleğini çok daha verimli kullanır.
Bu yaklaşım veri ambarı sistemlerinde kullanılan modern yöntemlerden biridir.
3. Paralel Çalışma
Pandas çoğu zaman tek çekirdek kullanır.
DuckDB ise:
- 4 çekirdek
- 8 çekirdek
- 16 çekirdek
gibi tüm CPU kaynaklarını kullanabilir.
Bu nedenle aynı sorgu çoğu zaman Pandas'tan kat kat hızlı çalışabilir.
Kurulum
Python ortamında kurulum son derece kolaydır.
pip install duckdb
İlk DuckDB Uygulaması
import duckdb
sonuc = duckdb.sql("""
SELECT 10 + 20
""").fetchall()
print(sonuc)
Çıktı:
[(30,)]
DataFrame Üzerinde SQL Çalıştırma
DuckDB'nin en etkileyici özelliklerinden biri Pandas DataFrame'lerini doğrudan sorgulayabilmesidir.
import pandas as pd
import duckdb
df = pd.DataFrame({
"urun": ["A", "B", "C"],
"fiyat": [100, 200, 300]
})
sonuc = duckdb.sql("""
SELECT *
FROM df
WHERE fiyat > 150
""").df()
print(sonuc)
Çıktı:
urun fiyat
1 B 200
2 C 300
Pandas Yerine DuckDB Kullanmak
Pandas:
df.groupby("category")["amount"].sum()
DuckDB:
duckdb.sql("""
SELECT
category,
SUM(amount)
FROM df
GROUP BY category
""").df()
Özellikle:
- 10 milyon+
- 100 milyon+
- 1 milyar+
satırlık verilerde DuckDB genellikle çok daha verimlidir.
CSV Dosyasını Doğrudan Sorgulamak
DuckDB'nin en sevilen özelliklerinden biri budur.
Dosyayı yüklemeye gerek yoktur.
import duckdb
result = duckdb.sql("""
SELECT *
FROM read_csv_auto('sales.csv')
LIMIT 10
""").df()
Parquet Dosyasını Doğrudan Sorgulamak
Veri mühendisliği dünyasında en yaygın kullanım senaryosu budur.
import duckdb
result = duckdb.sql("""
SELECT
customer_id,
SUM(amount)
FROM 'sales.parquet'
GROUP BY customer_id
""").df()
DuckDB Parquet desteğini yerleşik olarak sunmaktadır.
Birden Fazla Parquet Dosyasını Okumak
duckdb.sql("""
SELECT *
FROM 'data/*.parquet'
""")
Bu özellik veri gölü (Data Lake) mimarilerinde büyük avantaj sağlar.
DuckDB ve Yapay Zekâ
Modern AI projelerinde verinin büyük bölümü:
- CSV
- JSON
- Parquet
- Data Lake
üzerinde bulunur.
DuckDB;
- RAG veri hazırlama
- Embedding üretimi öncesi filtreleme
- Prompt veri kümelerinin hazırlanması
- Eğitim verilerinin temizlenmesi
gibi süreçlerde yaygın şekilde kullanılmaktadır. ([arXiv][6])
DuckDB ve Apache Spark Karşılaştırması
| Özellik | DuckDB | Spark |
|---|---|---|
| Kurulum | Çok Kolay | Karmaşık |
| Sunucu Gereksinimi | Yok | Var |
| Cluster | Yok | Var |
| Küçük Veri | Çok İyi | Gereksiz |
| Orta Ölçek Veri | Çok İyi | İyi |
| Devasa Dağıtık Veri | Yetersiz | Çok İyi |
Genel kabul gören yaklaşım:
- Tek makine → DuckDB
- Cluster → Spark
şeklindedir. ([Reddit][5])
DuckDB ve PostgreSQL Karşılaştırması
| Özellik | PostgreSQL | DuckDB |
|---|---|---|
| Transaction | Güçlü | Sınırlı |
| CRUD | Güçlü | Orta |
| API Backend | Mükemmel | Uygun Değil |
| Dashboard | Orta | Çok Güçlü |
| Veri Analizi | İyi | Çok Güçlü |
DuckDB bir web uygulaması veritabanı değildir.
PostgreSQL'in yerine kullanılmaz.
Ancak PostgreSQL üzerindeki büyük verileri analiz etmek için mükemmel bir araçtır.
DuckDB'nin Güçlü Yanları
Sunucusuz Mimari
Kurulum gerektirmez.
SQL Desteği
Oldukça gelişmiş SQL desteği sunar.
Pandas Entegrasyonu
Doğrudan DataFrame sorgulayabilir.
Parquet Desteği
Veri mühendislerinin en sevdiği özelliklerden biridir.
Büyük Veri Performansı
Bellekten büyük veri kümeleri üzerinde çalışabilir.
DuckDB'nin Zayıf Yanları
OLTP Sistemi Değildir
Web uygulamalarının ana veritabanı olmamalıdır.
Çok Kullanıcılı Yazma Senaryoları
Yoğun eşzamanlı transaction sistemleri için tasarlanmamıştır.
Dağıtık Mimari Yoktur
Spark veya BigQuery alternatifi değildir.
Veri Mühendisleri İçin En Güçlü Senaryolar
ETL
CSV → DuckDB → Parquet
Log Analizi
100 GB log
↓
DuckDB
↓
SQL Analizi
AI Dataset Hazırlama
Parquet
↓
DuckDB
↓
Embedding Pipeline
Data Lake Analitiği
S3
↓
Parquet
↓
DuckDB
↓
Dashboard
DuckDB günümüzde veri mühendisliği, veri bilimi ve yapay zekâ projelerinde "yerel veri ambarı" gibi kullanılmaktadır. Özellikle Python geliştiricileri için Pandas ile SQL dünyasını birleştiren son derece güçlü bir araçtır. Küçük ve orta ölçekli analitik iş yüklerinde, çoğu zaman ayrı bir PostgreSQL, Spark veya veri ambarı kurmaya gerek kalmadan tek bir Python paketi ile yüksek performanslı analizler gerçekleştirilebilir.
Top comments (0)