Feature / DesignDuckDB ๐Ÿฆ†SQLite ๐Ÿ“œPostgres ๐Ÿ˜ClickHouse โšก
Execution modelVectorized (2k values per column)Row-at-a-timeRow-at-a-time (some batching)Vectorized, columnar
SIMD usageYes (AVX/NEON intrinsics, auto-vectorization)NoLimitedYes (broad SIMD usage in scans & aggregates)
Storage layoutColumnar (.duckdb, Parquet, Arrow)Row storeRow storeColumnar (native format + Parquet/ORC integration)
Best forEmbedded analytics (OLAP on local data/Parquet)Small apps, embedded OLTPFull-featured OLTP/OLAP hybridDistributed, large-scale OLAP
ParallelismYes: in-process morsel-driven schedulerNo (single-threaded)Yes (process-based, higher overhead)Yes: massively parallel, multi-node clusters
DeploymentEmbedded, in-processEmbedded, in-processClient/server daemonDistributed client/server (scale-out cluster)
I/O pushdownYes: projection + predicate pushdown for Parquet/ArrowN/ALimited (index-based)Yes: column/partition pruning, compression indexes
OverheadVery low (same-process threads, no IPC)Very low (single-threaded)Higher (IPC, process-per-query)Moderate (network RPC, cluster coordination)
OLTP performanceWeakStrongStrongWeak (not designed for transactional workloads)
OLAP performanceExcellent (SIMD + columnar + vectorized, embedded)PoorGood (but slower vs columnar)Excellent at scale (terabytes โ†’ petabytes, distributed)
ScalabilitySingle-machine (fits well into laptops, servers)Single-machineScales vertically with replication/partitioningHorizontal scale-out (clusters across 100s of nodes)
Common use casesData science, local analytics, Python/R notebooksMobile apps, small embedded DBsProduction transactional DBs, hybrid workloadsBig data analytics, event logs, monitoring, real-time dashboards