Büyük veri setlerinde (10M - 1 Milyar satır) satır bazlı PostgreSQL heap yapısının darboğazlarını, kolonsal (columnar) sıkıştırmayı ve ClickHouse ile DuckDB'nin SIMD vektörel sorgu hızını simüle edin.
| Veritabanı Motoru | Mimari | Sorgu Süresi | Disk Boyutu | RAM Tüketimi | Hızlanma |
|---|---|---|---|---|---|
| PostgreSQL 17 (Standart Satir Depolama) | Row-Oriented Heap Table (MVCC Tuple) | 12.63 sn | 18.2 GB | 2056 MB | 1.0x (Referans) |
| PostgreSQL 17 + pg_duckdb (HTAP) | Postgres ici Vektorel Parquet Motoru | 318 ms | 3.9 GB | 580 MB | 39.7x Hızlı |
| DuckDB (In-Process OLAP) | Gomulu Vektorel C++ Motoru (Agsiz) | 85 ms | 3.1 GB | 370 MB | 148.6x Hızlı |
| ClickHouse (Vectorized MergeTree) | Dagitik Kolonsal Vektorel Motor (AVX-512) | 57 ms | 2.5 GB | 420 MB | 221.5x Hızlı |
ClickHouse MergeTree motoru ile PostgreSQL pg_duckdb eklentisinin Parquet sorgulama sözdizimleri.
-- ClickHouse MergeTree Kolonsal Tablo ve Vektorel Agregasyon:
CREATE TABLE user_events (
event_time DateTime64(3),
user_id UInt64,
event_type LowCardinality(String),
revenue Decimal64(4)
) ENGINE = MergeTree()
PARTITION BY toYYYYMM(event_time)
ORDER BY (event_type, event_time, user_id);
-- 100M+ satirda 50-80 ms'de donen analitik sorgu:
SELECT
event_type,
toStartOfHour(event_time) AS hour_bucket,
count(*) AS total_hits,
sum(revenue) AS total_revenue
FROM user_events
WHERE event_time >= now() - INTERVAL 7 DAY
GROUP BY 1, 2
ORDER BY 4 DESC;Geleneksel ilişkisel veritabanları (standart PostgreSQL, MySQL), her satırı diskte ardışık bir blok halinde saklar. Örneğin 100 sütunlu bir tabloda yalnızca 2 sütunu toplayıp filtrelemek (SELECT category, SUM(price)) istediğinizde, PostgreSQL diski tararken ilgisiz diğer 98 sütunun tüm baytlarını da belleğe yüklemek zorunda kalır.
Bu durum yüksek disk I/O trafiğine, yüksek NVMe okuma gecikmesine ve CPU önbelleklerinin (L1/L2/L3 cache) kirletilmesine yol açar. 100 milyon satırlık bir agregasyon sorgusu standart PostgreSQL üzerinde 10 ila 45 saniye sürebilir.
ClickHouse ve DuckDB verileri sütun bazlı (column-oriented) depolar. Sorguda yalnızca ilgili sütunlar okunur ve aynı veri tipine sahip milyonlarca sayı ardışık olarak LZ4 veya Zstandard ile sıkıştırılır.
Modern x86-64 (AVX-512) ve ARM (NEON) işlemcilerin vektör talimat setleri sayesinde tek bir CPU çevriminde 16 veya 32 adet tamsayı aynı anda toplanabilir (Vectorized Execution). Bu sayede aynı 100 milyon satırlık sorgu ClickHouse üzerinde 50 - 120 milisaniyede tamamlanır.
Eğer ayrı bir ClickHouse kümesi kurmak istemiyorsanız, PostgreSQL 17 + pg_duckdb eklentisi ile Postgres içinden Parquet dosyalarını vektörel olarak sorgulayarak hem operasyonel karmaşıklığı sıfırlayabilir hem de 20-30 kat hızlanma elde edebilirsiniz.