LivChart'ta Neden DuckDB'yi Seçtik?

LivChart'ı geliştirirken temel bir mimari karar ile karşılaştık: bulut veritabanlarına bağımlı olmadan, kurumsal ölçekte veriyi yerel olarak nasıl işleriz? PostgreSQL, SQLite, ClickHouse ve daha birçoğunu değerlendirdikten sonra DuckDB'yi seçtik — ve bunun doğru bir karar olduğunun nedenini burada anlatıyoruz.

Sorun: Bulut Öncelikli Analitik, Gizlilik İçin Çözümsüz

Günümüzdeki çoğu analitik aracı, verinizi buluta göndereceğinizi varsayar. Power BI Azure'a bağlanır. Tableau sizi Tableau Cloud'a iter. "Kendi sunucunuzda barındırılan" araçlar bile veriyi üçüncü taraf servislerden geçiren harici veritabanı bağlantıları gerektirir.

Hassas finansal kayıtlar, üretim verileri veya kişisel bilgiler işleyen kuruluşlar için bu kabul edilemez. GDPR, KVKK ve sektörel uyumluluk çerçeveleri, bulut öncelikli analitiği yasal bir riske dönüştürür.

Bize, tamamen kullanıcının makinesinde çalışabilen, milyonlarca satırı saniyeler içinde işleyebilen ve AI boru hattımızla sorunsuz entegre olan gömülü bir analitik veritabanı gerekiyordu.

DuckDB Nedir?

DuckDB, analitik için tasarlanmış proses içi SQL OLAP veritabanıdır. Bunu "analitik için SQLite" olarak düşünebilirsiniz — ancak işlem yüklerini (OLTP) optimize etmek yerine, DuckDB analitik sorgular (OLAP) için sıfırdan inşa edilmiştir.

  • Sunucu gerekmez: Doğrudan uygulama sürecine gömülü
  • Sütun temelli depolama: Veri sütun bazında saklanır, agregat sorguları katbekat hızlandırır
  • Vektörleştirilmiş çalıştırma: Satır satır yerine toplu değer gruplarını işler
  • Sıfır konfigürasyon: Kurulum yok, yükleme yok, DBA gerekmez
  • Tek dosya depolama: Tüm veritabanı bir .duckdb dosyasında

DuckDB vs Geleneksel Veritabanları: Teknik Karşılaştırma

1. DuckDB vs PostgreSQL

PostgreSQL mükemmel bir OLTP veritabanıdır, ancak analitik yükler için tasarlanmamıştır.

Metrik PostgreSQL DuckDB
Depolama modeli Satır yönelimli Sütun yönelimli
Agregat sorgu (1M satır) ~800ms ~45ms
Kurulum karmaşıklığı Sunucu + yapılandırma + kullanıcı yönetimi Sıfır — gömülü
Harici bağımlılık Çalışan sunucu gerekir Yok — proses içi
Bellek ayak izi (boşta) ~50-100MB ~10MB

LivChart'ın kullanım senaryosu için — satış verilerini toplama, pivot tablolar oluşturma, istatistiksel özetler çalıştırma — sütun temelli depolama, satır yönelimli veritabanlarına kıyasla 17-20 kat daha hızlı sorgular sağlar.

2. DuckDB vs SQLite

SQLite gömülü veritabanlarının kralıdır, ancak OLTP yükleri (INSERT/UPDATE/DELETE) için optimize edilmiştir, analitik için değil.

Metrik SQLite DuckDB
Depolama modeli Satır yönelimli (B-tree) Sütun yönelimli
10M satır üzerinde SUM ~2.5s ~80ms
GROUP BY + agregat ~3.2s ~120ms
Pencere fonksiyonları Desteklenir (yavaş) Optimize (hızlı)
Paralel sorgu çalıştırma Tek iş parçacıklı Çok iş parçacıklı

SQLite bir seferde bir satır işler. DuckDB'nin vektörleştirilmiş motoru aynı anda 1024 değerlik vektörleri işler. Analitik sorgular için bu 30-40 kat daha hızlı demektir.

3. DuckDB vs ClickHouse

ClickHouse güçlü bir sütun temelli veritabanıdır, ancak sunucu tabanlı bir sistemdir.

Metrik ClickHouse DuckDB
Mimari İstemci-sunucu Gömülü proses içi
Kurulum Karmaşık (yapılandırmalar, kullanıcılar, kümeler) Sıfır yapılandırma
Dağıtım Özel sunucu/küme Uygulamanızla birlikte gelir
Veri hacmi uygunluk Petabayt ölçeği Tabayt ölçeğine kadar
Ağ bağımlılığı Gerekli (istemci-sunucu) Yok (yerel dosya)

ClickHouse yerel analitik için aşırıya kaçmaktır. Yerel bir makinede 100K ile 100M satır arası işliyorsanız, DuckDB altyapı yükü olmadan sütun performansı verir.

DuckDB, LivChart'ın AI Boru Hattını Nasıl Besliyor?

LivChart'ta DuckDB, ham veri ile AI analizi arasında köprü görevi görür:

  1. Veri Alımı: Kullanıcılar Excel, CSV veya SQL veritabanlarını bağlar. DuckDB yerel okuyucularıyla veriyi saniyeler içinde içe aktarır.
  2. Sorgu Katmanı: AI doğal dilden SQL sorgusu ürettiğinde, DuckDB saniyenin altında performansla çalıştırır.
  3. Agregat Motoru: Panel araçları (SUM, AVG, COUNT, GROUP BY) agregat sorgularını DuckDB'nin vektörleştirilmiş motoruyla çalıştırır.
  4. Ara Depolama: AI analiz sonuçları, daha fazla keşif için DuckDB'ye geri yazılır.

Örnek: Doğal Dilden DuckDB Sorgusuna

Kullanıcı sorar: "Geçen çeyrekte gelir bazında en iyi 10 ürünümüz hangileriydi?"

AI, DuckDB SQL üretir:

SELECT product_name, 
       SUM(revenue) as total_revenue,
       COUNT(*) as order_count
FROM sales_data
WHERE sale_date >= DATE_TRUNC('quarter', CURRENT_DATE - INTERVAL '3 months')
GROUP BY product_name
ORDER BY total_revenue DESC
LIMIT 10;

DuckDB bunu 5 milyon satırda 50ms'nin altında çalıştırır. Kullanıcı anında sonuç alır — bekleme yok, bulut gidiş-dönüş yok.

Dayandığımız DuckDB Özellikleri

1. Doğrudan CSV/Parquet Okuma

DuckDB, CSV ve Parquet dosyalarını önce belleğe yüklemeden sorgulayabilir:

SELECT * FROM read_csv_auto('sales_2026.csv');
SELECT * FROM read_parquet('analytics_data.parquet');

Bu, LivChart kullanıcılarının 500MB'lık bir CSV dosyasını sürükleyip bırakarak anında sorgulamaya başlayabileceği anlamına gelir — içe aktarma adımı gerekmez.

2. Pencere Fonksiyonları

Analitik sorgular, yürüyen toplamlar, sıralamalar ve hareketli ortalamalar için yoğun olarak pencere fonksiyonları kullanır:

SELECT date, 
       revenue,
       SUM(revenue) OVER (ORDER BY date ROWS 7 PRECEDING) as rolling_7day,
       RANK() OVER (ORDER BY revenue DESC) as rank
FROM daily_sales;

DuckDB bunları optimize vektörleştirilmiş boru hatlarıyla çalıştırır — satır yönelimli veritabanlarından katbekat hızlı.

3. Paralel Çalıştırma

DuckDB, sorguları kullanılabilir CPU çekirdekleri arasında otomatik olarak paralelleştirir. Modern 8 çekirdekli bir makinede, karmaşık agregatlar herhangi bir yapılandırma olmadan doğrusal ölçeklendirmeden yararlanır.

4. MotherDuk Entegrasyonu (Gelecek)

Kullanıcılar bulut özellikleri istediğinde, DuckDB sorunsuz olarak MotherDuk'a bağlanır — aynı SQL lehçesi ve sorgu motorunu koruyarak yerel depolamanın ötesine ölçeklenmelerini sağlar. Bu, analitik katmanımızı yeniden yazmadan gelecekteki bir yükseltme yolu sunar.

Kıyaslama: Gerçek Dünya Performansı

LivChart'ın DuckDB katmanını yaygın kurumsal senaryolara karşı kıyasladık:

İşlem Satır PostgreSQL SQLite DuckDB
Tam tablo taraması + filtre 5M 1.2s 3.8s 38ms
GROUP BY + SUM 5M 850ms 2.9s 52ms
Pencere fonksiyonu (RANK) 2M 2.1s 5.4s 95ms
Çoklu tablo JOIN + agregat 3M + 1M 1.8s 4.2s 78ms
CSV içe aktarma + sorgu 1M satır 4.5s 6.1s 0.8s

Kıyaslamalar Apple M2, 16GB RAM, macOS üzerinde çalıştırılmıştır. PostgreSQL 16, SQLite 3.45, DuckDB 1.2.

Ödünleşimler (Dürüst Değerlendirme)

Hiçbir teknoloji mükemmel değildir. DuckDB'nin sınırları şuralardadır:

  • OLTP için değil: Yüksek frekanslı INSERT/UPDATE işlemleri PostgreSQL'den daha yavaştır. DuckDB toplu işlemler için optimize edilmiştir, satır satır mutasyonlar için değil.
  • Eşzamanlı yazma: DuckDB bir seferde tek bir yazıcı destekler. Birden fazla eşzamanlı yazıcı gerekiyorsa, sunucu tabanlı bir veritabanına ihtiyacınız vardır.
  • Depolama boyutu: Dar ve çok sütunlu tablolarda sütun depolama, satır yönelimli depolamadan daha büyük olabilir. Geniş analitik tablolarda sıkıştırma genellikle daha küçük yapar.
  • Ekosistem olgunluğu: PostgreSQL/SQLite'dan daha genç — daha az üçüncü taraf araç, ancak ekosistem hızla büyüyor.

LivChart'ın analitik öncelikli kullanım senaryosu için bu ödünleşimler kabul edilebilir. Kullanıcılarımız öncelikle veri okur ve toplar, saniyede binlerce işlem yazmazlar.

Sonuç

DuckDB, LivChart'a başka hiçbir veritabanının veremeyeceği bir şey sağladı: sıfır yapılandırmalı gömülü pakette bulut sınıfı analitik performans. Kullanıcılarımız milyonlarca satırı yerel olarak işler, saniyenin altında sorgu yanıtları alır ve verilerini asla harici sunuculara göndermez.

Hızlı yerel analitiğe ihtiyaç duyan her uygulama için — ister bir masaüstü BI aracı, ister bir AI veri boru hattı, ister çevrimdışı bir analiz iş istasyonu — DuckDB açık seçimdir. "Yerel öncelikli AI analitiğini" teknik olarak mümkün kılan temeldir.

LivChart'ı DuckDB ile bugün deneyin → livchart.com