DuckDB, uygulamanizin icinde calisan, sunucu gerektirmeyen ve analitik sorgular icin tasarlanmis acik kaynakli bir SQL veritabani motorudur. Cogu zaman "analitik icin SQLite" olarak anilir: kurulumu neredeyse yoktur, tek bir dosyada ya da bellekte calisir, ama buyuk veri kumelerinde toplulastirma ve raporlama sorgularina odaklanir. Bu rehberde DuckDB'nin ne oldugunu, nasil calistigini, guclu ve zayif yanlarini ve ne zaman dogru secim oldugunu ele aliyoruz.

DuckDB Nedir?

DuckDB, surec-ici (in-process) calisan bir cevrimici analitik isleme (OLAP) veritabani yonetim sistemidir. Ayri bir sunucu sureci baslatmaniz gerekmez; motor, C++ ile yazilmis bir kutuphane olarak dogrudan uygulamanizin sureci icine baglanir. Sorgular ag uzerinden degil, ayni surec icindeki fonksiyon cagrilariyla islenir.

Proje, Hollanda'daki CWI (Centrum Wiskunde & Informatica) arastirma merkezinde Mark Raasveldt ve Hannes Muhleisen tarafindan gelistirildi ve ilk olarak 2019'da halka acildi. Kaynak kodu MIT lisansi ile dagitilir; yani serbestce kullanilabilir, degistirilebilir ve ticari urunlere gomulebilir. Adini, gelistiricilerinden birinin evcil ordegi ilham verdigi icin "duck" (ordek) sozcugunden alir.

DuckDB'nin veritabani dunyasindaki yerini gormek icin veritabani turleri rehberimize goz atabilirsiniz. Yaklasimini en iyi anlamanin yolu, onu gomulu ama satir tabanli bir motor olan SQLite ile karsilastirmaktir: benzer kullanim kolayligi, farkli bir amac.

Surec-Ici (Sunucusuz) Mimari

Cogu veritabani istemci-sunucu modelini izler: arka planda surekli calisan bir sunucu sureci vardir ve uygulamalar sorgu gondermek icin ona ag ya da soket uzerinden baglanir. PostgreSQL ve benzeri sistemler bu sekilde calisir. DuckDB bu yaklasimi tersine cevirir: ayri bir sunucu yoktur, uygulamaniz DuckDB kutuphanesini kendi sureci icinde cagirir ve veriye dogrudan erisir.

Bu tasarim ag gecikmesini, ayri bir servisi ayakta tutma yukunu ve cogu yapilandirma adimini ortadan kaldirir. Kurulum genellikle tek bir komut ya da paket bagimliligina indirgenir; harici DLL veya baglanti gerekmez. Bu sadelik DuckDB'yi veri bilimi not defterleri, komut satiri arac zincirleri ve masaustu uygulamalari icin ozellikle cekici kilar.

Karsiliginda DuckDB tek bir makinede, cogunlukla tek bir uygulamanin yaninda calisacak sekilde konumlanir. Ag uzerinden coklu kullanicili es zamanli erisim onun birincil hedefi degildir; bu yonuyle klasik bir istemci-sunucu OLTP veritabaninin yerini almaz, onu tamamlar.

Sutun Tabanli Depolama ve Vektorlestirilmis Yurutme

DuckDB'nin analitik performansinin temelinde iki tasarim karari yatar: sutun tabanli (columnar) depolama ve vektorlestirilmis (vectorized) sorgu yurutucu. Geleneksel islemsel veritabanlari veriyi cogunlukla satir satir saklar; bu, tek bir kaydin tum alanlarina hizli erisim icin idealdir. Analitik sorgularsa genellikle milyonlarca satirin yalnizca birkac sutununu tarar (ornegin "tum satislarin toplami").

Sutun tabanli depolamada her sutun ayri ayri tutulur. Boylece bir toplulastirma sorgusu yalnizca ihtiyac duydugu sutunlari okur, geri kalanini diske hic dokunmadan atlar. Ayrica ayni turdeki degerler bir arada durdugu icin sikistirma cok daha etkilidir.

Vektorlestirilmis yurutucu ise veriyi tek tek satirlar yerine kucuk yiginlar ("vektorler") halinde isler. Islemci bir seferde bir grup deger uzerinde calisinca modern CPU onbellekleri ve komut hatlari cok daha verimli kullanilir. Bu iki teknik bir araya geldiginde DuckDB, buyuk taramalarda ve gruplamalarda satir tabanli motorlara gore belirgin bir avantaj saglar.

OLAP ve OLTP: DuckDB Nereye Oturur?

Veritabanlari kabaca iki is yukune gore ayrilir. OLTP (cevrimici islem isleme) sistemleri cok sayida kucuk okuma/yazma islemini, ornegin siparis olusturma veya kullanici guncelleme gibi islemleri hizli ve guvenli yapar. OLAP (cevrimici analitik isleme) sistemleriyse buyuk veri kumeleri uzerinde karmasik toplulastirma ve raporlama sorgularina odaklanir.

DuckDB acikca OLAP tarafinda konumlanir. Asagidaki tablo, gomulu bir OLTP motoru olan SQLite ile DuckDB arasindaki temel farki ozetler; ikisi de surec-ici calisir ama farkli isler icin optimize edilmistir.

OzellikDuckDB (OLAP)SQLite (OLTP)
Birincil amacAnalitik: toplulastirma, raporlamaIslemsel: kayit ekleme/guncelleme
Depolama duzeniSutun tabanli (columnar)Satir tabanli (row-based)
Yurutme modeliVektorlestirilmisSatir bazli
Tipik sorguMilyonlarca satirin birkac sutunuTekil kayitlara hizli erisim
Calisma bicimiSurec-ici, tek dosya/bellekSurec-ici, tek dosya

Dosyalari Dogrudan Sorgulama

DuckDB'nin en pratik ozelliklerinden biri, veriyi once iceri aktarmadan dosyalar uzerinde dogrudan SQL calistirabilmesidir. Parquet, CSV ve JSON dosyalarini adeta birer tabloymus gibi sorgulayabilirsiniz. Bu, veri hazirlama ve kesifsel analiz surecini onemli olcude kisaltir.

sql
-- Bir CSV dosyasini dogrudan sorgula
SELECT bolge, SUM(tutar) AS toplam
FROM 'satislar.csv'
GROUP BY bolge
ORDER BY toplam DESC;

-- Bir Parquet dosyasi kumesini birlikte oku
SELECT COUNT(*)
FROM 'veri/*.parquet'
WHERE yil = 2025;

Eklenti sistemi sayesinde DuckDB'nin yetenekleri genisletilebilir. Ornegin httpfs eklentisi, Amazon S3 gibi uzak nesne depolarindaki dosyalari indirmeden sorgulamaya olanak tanir. Bu yaklasim, "veriyi tasima, sorguyu veriye goturme" felsefesini yerel arac zincirlerine getirir.

Diller ve Entegrasyonlar

DuckDB genis bir dil yelpazesinde istemci kutuphanelerine sahiptir: Python, R, Java, C/C++, Node.js, Go, Rust ve daha fazlasi. Ozellikle veri bilimi dunyasinda populerdir, cunku Python tarafinda Pandas ve Apache Arrow veri yapilarini kopyalamadan, dogrudan sorgulayabilir.

python
import duckdb
import pandas as pd

df = pd.DataFrame({"sehir": ["Ankara", "Izmir", "Ankara"],
                   "tutar": [100, 250, 75]})

# Pandas DataFrame'i dogrudan SQL ile sorgula
sonuc = duckdb.sql(
    "SELECT sehir, SUM(tutar) AS toplam FROM df GROUP BY sehir"
).df()

print(sonuc)

DuckDB ayrica WebAssembly (DuckDB-Wasm) olarak derlenebildigi icin tarayicida, sunucuya hic veri gondermeden analitik calistirmak mumkundur. Bu, gizlilik gerektiren ya da sunucusuz calisan veri panolari icin ilgi cekici bir secenektir.

Depolama, Islemler ve Tutarlilik

DuckDB verilerinizi tek bir veritabani dosyasinda (yaygin olarak .duckdb uzantili) saklayabilir ya da tamamen bellekte, kalici olmayan bir sekilde calisabilir. Bellek modu, gecici analizler ve test icin idealdir; dosya modu ise sonuclarin kaliciligini saglar.

Motor ACID islemleri destekler ve es zamanlilik denetimini cok surumlu (MVCC) bir yaklasimla yonetir. Bu, bir islem sirasinda hata olustugunda degisikliklerin geri alinabilecegi (rollback) ve tutarli bir duruma donulecegi anlamina gelir.

sql
BEGIN;
  CREATE TABLE gunluk_ozet AS
  SELECT tarih, SUM(tutar) AS toplam
  FROM 'satislar.parquet'
  GROUP BY tarih;
COMMIT;   -- Islem butun halinde kalici olur

Kurulum ve Hizli Baslangic

DuckDB'yi denemek genellikle tek bir adima iner. Komut satiri arayuzunu (CLI) indirebilir ya da tercih ettiginiz dilin paket yoneticisiyle kutuphaneyi kurabilirsiniz. Asagida Python ve CLI icin ornek verilmistir.

bash
# Python istemcisini kur
pip install duckdb

# CLI ile bir veritabani dosyasi ac
duckdb analiz.duckdb

# CLI icinde bir Parquet dosyasini tabloya aktar
# D> CREATE TABLE olaylar AS SELECT * FROM 'olaylar.parquet';

DuckDB, SQL'i gunluk kullanimda daha rahat kilan bazi kolayliklar da sunar; ornegin bir sutun kumesinden birkacini haric tutmak ya da tum secilen sutunlara gore gruplamak icin kisayollar vardir. Bu tur eklemeler standart SQL'e sadik kalirken yazim yukunu azaltir.

Guclu Yanlar ve Sinirlar

DuckDB birçok senaryoda pratiklik ve performansi bir araya getirir, ancak her is yuku icin dogru arac degildir. Asagidaki tablo dengeyi ozetler.

Guclu YanlarSinirlar / Dikkat Edilecekler
Kurulum ve bagimlilik neredeyse yokYuksek es zamanli yazma icin tasarlanmamistir
Analitik sorgularda yuksek verimCoklu surecin ayni dosyaya yazmasi kisitlidir
Dosyalari (Parquet/CSV/JSON) dogrudan sorgularCok kullanicili ag servisi degildir
Genis dil destegi ve WasmCok buyuk kurumsal olceklerde dagitik motorlar gerekebilir
Acik kaynak (MIT), ticari kullanima uygunOLTP is yukleri icin uygun degildir

Ne Zaman DuckDB Kullanmali?

DuckDB, veriyi bulundugu yerde hizlica analiz etmek istediginizde parlar. Tipik senaryolar:

  • Yerel veri bilimi ve kesifsel analiz (Python/R not defterleri)
  • Parquet, CSV ve JSON dosyalari uzerinde hizli ETL/ELT donusumleri
  • Uygulama icine gomulu analitik ve raporlama
  • CI/CD hatlarinda veri dogrulama ve test sorgulari
  • Tarayicida (Wasm) sunucusuz, gizlilik dostu panolar

Buna karsilik, cok sayida kullanicinin es zamanli kayit ekleyip guncelledigi klasik bir uygulama arka ucu icin PostgreSQL gibi bir OLTP sistemi; kurumsal olcekte sutun tabanli veri ambari icinse Vertica gibi dagitik cozumler daha uygun olabilir.

DuckDB ve Modern Veri Yigini

DuckDB, dagitik veri ambarlarina ve akis (streaming) sistemlerine bir alternatif olmaktan cok, onlari tamamlayan bir katman olarak dusunulmelidir. Pek cok ekip, buyuk veri ambarindan cektigi bir Parquet dilimini yerelde DuckDB ile hizlica analiz eder, donusturur ve ancak sonucu paylasir. Bu "kucuk ama hizli" yaklasim, her sorgu icin uzak bir kumeyi mesgul etmeden hizli yineleme yapmayi mumkun kilar.

DuckDB'nin dosya formatlariyla dogal uyumu, onu ELT boru hatlarinda pratik bir donusum motoru haline getirir. Ham dosyalari okur, SQL ile temizler ve zenginlestirir, sonucu yeniden Parquet olarak yazar. Bu adimlar tek bir surec icinde, ek altyapi olmadan gerceklesir; boylece yerel gelistirme ile uretim mantigi birbirine yakinlasir.

Veritabani secimini genis bir cerceveye oturtmak isterseniz, iliskisel ve analitik sistemleri karsilastiran diger yazilarimiz iyi bir baslangic noktasidir. Her motorun kendi tatli noktasi vardir; DuckDB'ninki, tek makinede yuksek verimli analitiktir.

Lisans, Yonetisim ve Topluluk

DuckDB acik kaynaktir ve MIT lisansi altinda dagitilir; bu, hem bireysel hem ticari kullanimda genis bir serbestlik saglar. Projenin surdurulebilirligi, fikri mulkiyeti elinde tutan bir vakif ve gelistirmeyi yuruten sirket (DuckDB Labs) etrafinda kurgulanmistir. 2024 yilinda proje, kararli (stable) bir kilometre tasi olan 1.0 surumune ulasti.