Genel
DuckDB neden bu kadar hızlı?
Büyük ölçekli veri ile uğraşırken bir çok performans problemi ile uğraşmanız gerekir . Pandas kullananlar veri boyutu bir kaç milyon satırın üstüne çıktığında yavaşladığını tecrübe etmiştir, SQLite analitik için tasarlanmamıştır, veri ambarları dizayn istediğinden deneme yanılma için fazla komplekstir. Bu noktada DuckDB in-process bir veri tabanı olarak size bir cluster kurma gerekliliği olmadan hem esneklik hem de hız sağlar.
Peki DuckDB nin bu kadar hızlı olamasını ne sağlıyor?
1. Kolon Bazlı Saklama
DuckDB veriyi klasik veritabanlarından farklı olarak kolon bazlı olarak depolar. Klasik veritabanları OLTP gerekliliklerinden dolayı veryi satır bazlı saklamayı tercih etmektedir.
Satır bazlı saklama özellikle veri sık güncelleniyorsa ya da sıklıkla yeni satır ekleniyorsa işinizi daha çok görmektedir.
Kolon bazlı saklama analitik iş yüklerinde ve daha statik veri kümelerinde çok daha hızlıdır.
Press enter or click to view image in full size

Column Oriented vs Row Oriented
DuckDB sadece unit_price ve region kolonlarını okur. Özellikle çok kolonlu veri yapılarında bu çok büyük bir performans kazanımı sağlar.
2. Vectorized Execution Engine
DuckDB veriyi vektörler (binlerce değerin bir arada tutulduğu chunklar) halinde işler. Bu da satır satır işlem yapmak yerine chunklar toplu olarak işlenir ve bu işlem paralel olarak yapılır. Bu da CPU ların tüm gücünün kullanılmasına sebep olur.
Bu noktada özellikle cloud üstünden job olarak çalışan iş yükleri ya da docker/kubernates cluster üstünde tetiklenen iş yükleri istenen güçte başlatılıp farklı iş yükleri için farklı sizing yapma olanağı sağlanır. Ayrıca yine cloud için konuşacak olursak ölçeklenebilir iş yükleri maliyetin de ölçeklenebilmesine sebep olur.
Bu teknikler cache kullanımı, branch prediction algoritması, vectorized execution tekniği ile birlikte CPU nun tam kapasite kullanılabilmesine yol açar.
Press enter or click to view image in full size

3. Memory Yönetimi
DuckDB, Pandas gibi tüm veriyi RAM e yüklemeye çalışmaz. Out-of-core execution model isimle bir teknik kullanır ve verinin sadece gerekli kısımlarını RAM e yükler.
Aşağıdaki sorguyu ele alalım:
… veri seti RAM den büyük olsa bile DuckDB veriyi chunklara bölerek işleyecektir..
Press enter or click to view image in full size

4. Modern Formatlar ile Uyumluluk
DuckDB aşağıdaki veri formatları ile tam uyumlu çalışır:
CSV
Parquet
Arrow
DuckDB nin zero-copy prensibi ile diğer ürünlerin (pandas vs) bu dosyaları kendi içerisine aktarmadan sorgular direkt olarak ilgili dosyalar üzerinde çalışır, üst maddelerde bahsedilen chuck olarak işleme ve memory yönetimi prensipleri ile beraber
Press enter or click to view image in full size

Veriambarı kurulumları olmadan, ETL pipelineları kurulmadan direk SQL çalıştırarak analizler anında karşınızda.
6. Parallel Execution
DuckDB elinizdeki CPU corelarına sonuna kadar kullanarak sorgularınızda paralelizm oluşturur. Örneğin bir GROUP BY ifadesi 100M satır üzerinde çalışırken satırlar farklı threadlere bölünür ve sorgu süreleri dramatik şekilde azalır.
Bu konsepti vectorization ile birleştirince DuckDB elindeki kaynakları en verimli şekilde kullanan bir sisteme dönüşür. Cloud ortamında job olarak çalışan pipelinelar için maliyet etkin en sağlıklı çözümlerin önde gelenlerinden biri olarak düşünülebilir.
Sonuç
DuckDB kurgusu çok iyi yapılmış bir sorgu motorudur. Yukarda bahsettiğimiz sebeplerden dolayı Pandas gibi sistemlerin darboğazlarından sıkılan ya da dağıtık sistemleri idame ettirmenin zorluğundan yorulanlar için iyi biçilmiş bir kaftandır.






