Teknoloji

DuckDB neden bu kadar hızlı? Sütun depolama, vektörlü yürütme ve modern bir analitik motoru tasarımı

Hacker News1 gün önce
Mavi parıltılı soyut sütun grafikli veri görselleştirmesi
Mavi parıltılı soyut sütun grafikli veri görselleştirmesiPhoto: Georgie Devlin / Pexels

DuckDB, son üç yılda Python ile veri analizi yapan herkesin doğrudan ya da dolaylı olarak karşılaştığı bir araç haline geldi. Pandas, Polars ve PyArrow ile sıfır kopya entegrasyon, milyonlarca satırlık verisetlerinde SQL ile çalışmayı önemsiz hale getirdi. Hacker News'te ön sıraya çıkan yeni teknik yazı, motoru bu kadar hızlı yapan üç tasarım kararına yakından bakıyor.

Birinci karar: sütun depolama. Geleneksel ilişkisel veritabanları (PostgreSQL, MySQL) bir satırı tek bir disk bloğu içinde tutar. Analitik sorgular ise genellikle bir veya iki sütunu okumayı gerektirir. DuckDB tüm verileri sütun bazında depolar; bu sayede bir analitik sorgu, ihtiyacı olmayan sütunları okumak zorunda kalmaz.

İkinci karar: vektörlü yürütme. Geleneksel motorlar sorguyu tek tek satır üzerinde işler; yani for döngüsü mantığı her satır için ayrı yürütülür. DuckDB ise 2.048 satırlık paketler halinde işler — bir vektör. Bu, modern CPU'ların SIMD talimatlarıyla doğrudan eşleşir; ortalama, toplama ve karşılaştırma işlemleri 4 ila 16 kat daha hızlı çalışır.

Üçüncü karar: sıfır kopya entegrasyon. Pandas veya PyArrow gibi mevcut veri yapılarıyla çalışırken, DuckDB veri kopyası oluşturmadan doğrudan bellek alanını işaret eder. Klasik veritabanları için bir veri seti normalde önce CSV veya Parquet olarak diske yazılır, sonra okunur. DuckDB, bu adımı geçer ve doğrudan Python'ın belleğinden okur.

Bu üç kararı birleştirdiğinizde, tipik bir analitik sorgu için DuckDB, PostgreSQL'e kıyasla 5 ila 50 kat, Pandas'a kıyasla genelde 10 ila 100 kat daha hızlı çalışır. Hacker News tartışmasında yer alan kıyaslamalar, 100 milyon satır ölçeğinde DuckDB'nin tipik gruplama sorgusunu PostgreSQL'in onda biri zaman içinde tamamladığını gösteriyor.

Mimari öne çıkan diğer önemli bir özellik, çıktının disk yazısı için optimize edilmemiş olması. DuckDB, bir analitik sorgunun sonucunu bellekte hızlı üreten ve çoğunlukla doğrudan Python tarafında tüketilen bir model üzerine kurulu. Bu, OLTP iş yükü için uygunsuz bir tasarım; ancak analitik için bir avantaj.

Proje, akademik kökenli açık kaynak ürünlerin bir uzantısı olarak ortaya çıktı. Hollanda'daki CWI veritabanı grubunun bir akıl yürütmesi olarak başladı, 2019'da kamuya açıldı ve 2026'da artık üzerinde Goldman Sachs, Stripe, JP Morgan ve Klaviyo gibi şirketlerin veri analizi yığınlarında çalışıyor.

DuckDB'nin hızı sadece sütun depolama veya vektörlü yürütmeden gelmez; bunlar zaten bilinen tekniklerdir. Farkı yapan, üç kararın birlikte uygulanması ve modern Python veri ekosistemiyle kapsamlı bir entegrasyon. Aynı tekniklerin uygulandığı Apache Arrow ve Polars ile de DuckDB ortak bir tasarım dünyasında yaşar.

Lisanslama tarafında DuckDB MIT lisansı altında dağıtılır; bu da kurumsal benimseme için engel oluşturmaz. Cloudera'nın geçen yıl kapattığı bir kurumsal veritabanı projesinin yerine, çoğu kurum DuckDB'yi alır ve dahili veri görselleştirme araçlarına gömer.

Genel mesaj şu: DuckDB, küçük ve orta ölçekli analitik iş yükleri için yeni bir varsayılan haline geldi. "Veri tabanı sunucusu"na gerek duyulmadan, doğrudan Python script'inde milyarlarca satırı işleyebilmek, son birkaç yılın en pratik analitik atılımı sayılabilir. Hacker News yazısı, bu hızı tek bir formülde değil; üç tasarım kararının kompozit etkisinde aramak gerektiğini hatırlatıyor.

Bu yazı, Hacker Newskaynağına dayanılarak Vesper'ın yapay zeka editörü tarafından hazırlanmıştır. Görsel, Pexels'tan Georgie Devlin tarafından çekilmiş bir stok fotoğraftır.

Bunları da okuyun