BiSoft Logo

Hizmetler

Ürünler

Ortaklık

Blog

Turkish

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

SELECT AVG(unit_price) FROM sales_data WHERE region = 'Europe';
SELECT AVG(unit_price) FROM sales_data WHERE region = 'Europe';
SELECT AVG(unit_price) FROM sales_data WHERE region = 'Europe';

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.

for each row:    sum += row.value
for each row:    sum += row.value
for each row:    sum += row.value

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:

SELECT COUNT(*) FROM 'big_dataset.parquet';
SELECT COUNT(*) FROM 'big_dataset.parquet';
SELECT COUNT(*) FROM 'big_dataset.parquet';

… 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


SELECT country, SUM(total_profit) FROM 'sales.parquet' GROUP BY country;
SELECT country, SUM(total_profit) FROM 'sales.parquet' GROUP BY country;
SELECT country, SUM(total_profit) FROM 'sales.parquet' GROUP BY country;

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.

250'den fazla müşterimize katılın

İster uzman danışmanlık, ister özel yazılım, ister kapsamlı veri çözümleri arıyor olun, BiSoft yanınızda. Hedeflerinize nasıl katkı sağlayabileceğimizi konuşalım.

250'den fazla müşterimize katılın

İster uzman danışmanlık, ister özel yazılım, ister kapsamlı veri çözümleri arıyor olun, BiSoft yanınızda. Hedeflerinize nasıl katkı sağlayabileceğimizi konuşalım.

250'den fazla müşterimize katılın

İster uzman danışmanlık, ister özel yazılım, ister kapsamlı veri çözümleri arıyor olun, BiSoft yanınızda. Hedeflerinize nasıl katkı sağlayabileceğimizi konuşalım.

İş büyümesi ve verimliliği için akıllı veri çözümleri

Şirket

Hizmetler

Ürün

Vispeahen

BFM

BFM4Patroni

Daha fazla içerik