DuckDB, uygulamanızın içinde çalışan, sunucu gerektirmeyen ve analitik sorgular için tasarlanmış açık kaynaklı bir SQL veritabanı motorudur. Çoğu zaman "analitik için SQLite" olarak anılır: kurulumu neredeyse yoktur, tek bir dosyada ya da tamamen bellekte çalışır, ancak büyük veri kümelerinde toplulaştırma ve raporlama sorgularına göre ayarlanmıştır. Bu rehberde DuckDB'nin ne olduğunu, nasıl çalıştığını, güçlü ve zayıf yanlarını ve ne zaman doğru seçim olduğunu ele alıyoruz.
DuckDB Nedir?
DuckDB, süreç içi (in-process) çalışan bir çevrimiçi analitik işleme (OLAP) veritabanı yönetim sistemidir. Ayrı bir sunucu süreci başlatmanız gerekmez; C++ ile yazılmış olan motor, doğrudan uygulamanızın kendi sürecine bir kütüphane olarak bağlanır. Sorgular ağ üzerinden değil, aynı süreç içindeki fonksiyon çağrılarıyla işlenir.
Proje, Hollanda'daki CWI (Centrum Wiskunde & Informatica) araştırma merkezinde Mark Raasveldt ve Hannes Mühleisen tarafından geliştirildi ve ilk olarak 2019'da halka açıldı. Kaynak kodu MIT lisansı ile dağıtılır; yani serbestçe kullanılabilir, değiştirilebilir ve ticari ürünlere gömülebilir. Adını, geliştiricilerinden birine ilham veren evcil bir ördekten alır.
DuckDB'nin veritabanı dünyasındaki yerini görmek için veritabanı türleri rehberimize göz atabilirsiniz. Yaklaşımını en iyi anlamanın yolu, onu gömülü ama satır tabanlı bir motor olan SQLite ile karşılaştırmaktır: benzer kullanım kolaylığı, farklı bir amaç.
Süreç İçi (Sunucusuz) Mimari
Çoğu veritabanı istemci-sunucu modelini izler: arka planda sürekli çalışan bir sunucu süreci vardır ve uygulamalar sorgu göndermek için ona ağ ya da soket üzerinden bağlanır. PostgreSQL ve benzeri sistemler bu şekilde çalışır. DuckDB bu yaklaşımı tersine çevirir: ayrı bir sunucu yoktur, uygulamanız DuckDB kütüphanesini kendi süreci içinde çağırır ve veriye doğrudan erişir.
Bu tasarım ağ gecikmesini, ayrı bir servisi ayakta tutma yükünü ve çoğu yapılandırma adımını ortadan kaldırır. Kurulum genellikle tek bir komuta ya da bir paket bağımlılığına iner; harici DLL veya bağlantı gerekmez. Bu sadelik DuckDB'yi veri bilimi not defterleri, komut satırı araç zincirleri ve masaüstü uygulamaları için özellikle çekici kılar.
Buna karşılık DuckDB, tek bir makinede, çoğunlukla tek bir uygulamanın yanında çalışacak şekilde konumlanır. Ağ üzerinden çok kullanıcılı eş zamanlı erişim onun birincil hedefi değildir; bu yönüyle klasik bir istemci-sunucu OLTP veritabanının yerini almaz, onu tamamlar.
Sütun Tabanlı Depolama ve Vektörleştirilmiş Yürütme
DuckDB'nin analitik performansının temelinde iki tasarım kararı yatar: sütun tabanlı (columnar) depolama ve vektörleştirilmiş (vectorized) sorgu yürütücü. Geleneksel işlemsel veritabanları veriyi çoğunlukla satır satır saklar; bu, tek bir kaydın tüm alanlarına hızlı erişim için idealdir. Analitik sorgularsa genellikle milyonlarca satırın yalnızca birkaç sütununu tarar (örneğin "tüm satışların toplamı").
Sütun tabanlı depolamada her sütun ayrı ayrı tutulur. Böylece bir toplulaştırma sorgusu yalnızca ihtiyaç duyduğu sütunları okur, geri kalanına diskte hiç dokunmadan onları atlar. Ayrıca aynı türdeki değerler bir arada durduğu için sıkıştırma da çok daha etkilidir.
Vektörleştirilmiş yürütücü ise veriyi tek tek satırlar yerine küçük yığınlar ("vektörler") halinde işler. İşlemci bir seferde bir grup değer üzerinde çalışınca modern CPU önbellekleri ve komut hatları çok daha verimli kullanılır. Bu iki teknik bir araya geldiğinde DuckDB, büyük taramalarda ve gruplamalarda satır tabanlı motorlara göre belirgin bir avantaj sağlar.
OLAP ve OLTP: DuckDB Nereye Oturur?

Veritabanları kabaca iki iş yüküne göre ayrılır. OLTP (çevrimiçi işlem işleme) sistemleri çok sayıda küçük okuma/yazma işlemini, örneğin sipariş oluşturma veya kullanıcı güncelleme gibi işlemleri hızlı ve güvenli yapar. OLAP (çevrimiçi analitik işleme) sistemleriyse büyük veri kümeleri üzerinde karmaşık toplulaştırma ve raporlama sorgularına odaklanır.
DuckDB açıkça OLAP tarafında konumlanır. Aşağıdaki tablo, gömülü bir OLTP motoru olan SQLite ile DuckDB arasındaki temel farkı özetler; ikisi de süreç içi çalışır ama farklı işler için optimize edilmiştir.
| Özellik | DuckDB (OLAP) | SQLite (OLTP) |
|---|---|---|
| Birincil amaç | Analitik: toplulaştırma, raporlama | İşlemsel: kayıt ekleme/güncelleme |
| Depolama düzeni | Sütun tabanlı (columnar) | Satır tabanlı (row-based) |
| Yürütme modeli | Vektörleştirilmiş | Satır bazlı |
| Tipik sorgu | Milyonlarca satırın birkaç sütunu | Tekil kayıtlara hızlı erişim |
| Çalışma biçimi | Süreç içi, tek dosya/bellek | Süreç içi, tek dosya |
Dosyaları Doğrudan Sorgulama

DuckDB'nin en pratik özelliklerinden biri, veriyi önce içeri aktarmadan dosyalar üzerinde doğrudan SQL çalıştırabilmesidir. Parquet, CSV ve JSON dosyalarını adeta birer tabloymuş gibi sorgulayabilirsiniz. Bu, veri hazırlama ve keşifsel analiz sürecini önemli ölçüde kısaltır.
-- 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 genişletilebilir. Örneğin httpfs eklentisi, Amazon S3 gibi uzak nesne depolarındaki dosyaları indirmeden sorgulamaya olanak tanır. Bu yaklaşım, "veriyi taşıma, sorguyu veriye götürme" felsefesini yerel araç zincirlerine getirir.
Diller ve Entegrasyonlar
DuckDB geniş bir dil yelpazesinde istemci kütüphanelerine sahiptir: Python, R, Java, C/C++, Node.js, Go, Rust ve daha fazlası. Özellikle veri bilimi dünyasında popülerdir, çünkü Python tarafında Pandas ve Apache Arrow veri yapılarını kopyalamadan, doğrudan sorgulayabilir.
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 ayrıca WebAssembly (DuckDB-Wasm) olarak derlenebildiği için, tarayıcıda sunucuya hiç veri göndermeden analitik çalıştırmak mümkündür. Bu, gizlilik gerektiren ya da tamamen sunucusuz çalışan veri panoları için ilgi çekici bir seçenektir.
Depolama, İşlemler ve Tutarlılık
DuckDB verilerinizi tek bir veritabanı dosyasında (yaygın olarak .duckdb uzantılı) saklayabilir ya da tamamen bellekte, kalıcı olmayan bir şekilde çalışabilir. Bellek modu, geçici analizler ve test için idealdir; dosya modu ise sonuçların kalıcılığını sağlar.
Motor ACID işlemleri destekler ve eş zamanlılık denetimini çok sürümlü (MVCC) bir yaklaşımla yönetir. Bu, bir işlem sırasında hata oluştuğunda değişikliklerin geri alınabileceği (rollback) ve veritabanının tutarlı bir duruma döneceği anlamına gelir.
BEGIN;
CREATE TABLE gunluk_ozet AS
SELECT tarih, SUM(tutar) AS toplam
FROM 'satislar.parquet'
GROUP BY tarih;
COMMIT; -- Islem butun halinde kalici olurKurulum ve Hızlı Başlangıç
DuckDB'yi denemek genellikle tek bir adıma iner. Komut satırı arayüzünü (CLI) indirebilir ya da tercih ettiğiniz dilin paket yöneticisiyle kütüphaneyi kurabilirsiniz. Aşağıda Python ve CLI için örnek verilmiştir.
# 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 günlük kullanımda daha rahat kılan bazı kolaylıklar da sunar; örneğin bir sütun kümesinden birkaçını hariç tutmak ya da seçilen tüm sütunlara göre gruplamak için kısayollar vardır. Bu tür eklemeler standart SQL'e sadık kalırken yazım yükünü azaltır.
Güçlü Yanlar ve Sınırlar

DuckDB birçok senaryoda pratiklik ve performansı bir araya getirir, ancak her iş yükü için doğru araç değildir. Aşağıdaki tablo bu dengeyi özetler.
| Güçlü Yanlar | Sınırlar / Dikkat Edilecekler |
|---|---|
| Kurulum ve bağımlılık neredeyse yok | Yüksek eş zamanlı yazma için tasarlanmamıştır |
| Analitik sorgularda yüksek verim | Birden fazla sürecin aynı dosyaya yazması kısıtlıdır |
| Dosyaları (Parquet/CSV/JSON) doğrudan sorgular | Çok kullanıcılı bir ağ servisi değildir |
| Geniş dil desteği ve Wasm | Çok büyük kurumsal ölçeklerde dağıtık motorlar gerekebilir |
| Açık kaynak (MIT), ticari kullanıma uygun | OLTP iş yükleri için uygun değildir |
Ne Zaman DuckDB Kullanmalı?
DuckDB, veriyi bulunduğu yerde hızlıca analiz etmek istediğinizde parlar. Tipik senaryolar şunlardır:
- Yerel veri bilimi ve keşifsel analiz (Python/R not defterleri)
- Parquet, CSV ve JSON dosyaları üzerinde hızlı ETL/ELT dönüşümleri
- Uygulama içine gömülü analitik ve raporlama
- CI/CD hatlarında veri doğrulama ve test sorguları
- Tarayıcıda (Wasm) sunucusuz, gizlilik dostu panolar
Buna karşılık, çok sayıda kullanıcının eş zamanlı olarak kayıt ekleyip güncellediği klasik bir uygulama arka ucu için PostgreSQL gibi bir OLTP sistemi; kurumsal ölçekte sütun tabanlı bir veri ambarı içinse Vertica gibi dağıtık çözümler daha uygun olabilir.
DuckDB ve Modern Veri Yığını
DuckDB, dağıtık veri ambarlarına ve akış (streaming) sistemlerine bir alternatif olmaktan çok, onları tamamlayan bir katman olarak düşünülmelidir. Pek çok ekip, büyük bir veri ambarından çektiği bir Parquet dilimini yerelde DuckDB ile hızlıca analiz eder, dönüştürür ve paylaşır. Bu "küçük ama hızlı" yaklaşım, her sorgu için uzak bir kümeyi meşgul etmeden hızlı yineleme yapmayı mümkün kılar.
DuckDB'nin dosya formatlarıyla doğal uyumu, onu ELT boru hatlarında pratik bir dönüşüm motoru haline getirir. Ham dosyaları okur, SQL ile temizler ve zenginleştirir, sonucu yeniden Parquet olarak yazar. Bu adımlar tek bir süreç içinde, ek altyapı olmadan gerçekleşir; böylece yerel geliştirme ile üretim mantığı birbirine yaklaşır.
Veritabanı seçimini daha geniş bir çerçeveye oturtmak isterseniz, ilişkisel ve analitik sistemleri karşılaştıran diğer yazılarımız iyi bir başlangıç noktasıdır. Her motorun kendi tatlı noktası vardır; DuckDB'ninki, tek makinede yüksek verimli analitiktir.
Lisans, Yönetişim ve Topluluk
DuckDB açık kaynaktır ve MIT lisansı altında dağıtılır; bu, hem bireysel hem de ticari kullanımda geniş bir serbestlik sağlar. Projenin sürdürülebilirliği, fikri mülkiyeti elinde tutan bir vakıf ve geliştirmeyi yürüten bir şirket (DuckDB Labs) etrafında kurgulanmıştır. 2024 yılında proje, kararlı (stable) bir kilometre taşı olan 1.0 sürümüne ulaştı.