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
Enter fullscreen mode Exit fullscreen mode
DuckDB ise kolonları ayrı ayrı saklar:
ID:
1
2
Name:
Ali
Ayşe
Salary:
50000
70000
Enter fullscreen mode Exit fullscreen mode
Bu sayede sadece ihtiyaç duyulan kolonlar okunur.
Örneğin:
SELECT AVG(Salary)
FROM Employees;
Enter fullscreen mode Exit fullscreen mode
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
Enter fullscreen mode Exit fullscreen mode
ş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
Enter fullscreen mode Exit fullscreen mode
İlk DuckDB Uygulaması
import duckdb
sonuc = duckdb.sql("""
SELECT 10 + 20
""").fetchall()
print(sonuc)
Enter fullscreen mode Exit fullscreen mode
Çıktı:
[(30,)]
Enter fullscreen mode Exit fullscreen mode
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)
Enter fullscreen mode Exit fullscreen mode
Çıktı:
urun fiyat
1 B 200
2 C 300
Enter fullscreen mode Exit fullscreen mode
Pandas Yerine DuckDB Kullanmak
Pandas:
df.groupby("category")["amount"].sum()
Enter fullscreen mode Exit fullscreen mode
DuckDB:
duckdb.sql("""
SELECT
category,
SUM(amount)
FROM df
GROUP BY category
""").df()
Enter fullscreen mode Exit fullscreen mode
Ö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()
Enter fullscreen mode Exit fullscreen mode
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()
Enter fullscreen mode Exit fullscreen mode
DuckDB Parquet desteğini yerleşik olarak sunmaktadır.
Birden Fazla Parquet Dosyasını Okumak
duckdb.sql("""
SELECT *
FROM 'data/*.parquet'
""")
Enter fullscreen mode Exit fullscreen mode
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 İyiGenel 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
Enter fullscreen mode Exit fullscreen mode
Log Analizi
100 GB log
↓
DuckDB
↓
SQL Analizi
Enter fullscreen mode Exit fullscreen mode
AI Dataset Hazırlama
Parquet
↓
DuckDB
↓
Embedding Pipeline
Enter fullscreen mode Exit fullscreen mode
Data Lake Analitiği
S3
↓
Parquet
↓
DuckDB
↓
Dashboard
Enter fullscreen mode Exit fullscreen mode
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.
답글 남기기