DuckDB vs ClickHouse: Local vs Managed Analytics
DuckDB and ClickHouse are both columnar databases, but they serve different use cases. Here's a practical comparison to help you choose the right one.
DuckDB and ClickHouse are both fast columnar databases. Both are designed for analytical workloads. But they're designed for fundamentally different deployment models — and choosing the wrong one for your use case means either over-engineering a simple problem or under-engineering a complex one.
Here's the practical comparison.
The Core Difference#
DuckDB is an embedded, in-process database. It runs inside your application or script. No server, no network, no cluster. One file, one process.
ClickHouse is a server-based distributed database. It runs as a separate service, scales across multiple nodes, and handles concurrent queries from many users simultaneously.
This single difference drives almost every other trade-off.
Feature Comparison#
| Feature | DuckDB | ClickHouse |
|---|---|---|
| Deployment | Embedded, no server | Server process (or managed cloud) |
| Setup time | 30 seconds | 30 minutes to hours |
| Concurrent writers | 1 | Many |
| Concurrent readers | Many (read-only) | Many |
| Distributed query | No | Yes |
| Max dataset size | Single machine (~TB) | Petabytes |
| Query language | SQL (PostgreSQL dialect) | SQL (ClickHouse dialect) |
| ACID transactions | Yes (single-writer) | Limited (eventual consistency for some ops) |
| Streaming ingest | No | Yes (Kafka, HTTP, native) |
| Monthly cost | $0 | $0 (self-hosted) or $100-10,000+ (managed) |
| Operational overhead | Zero | Medium-high |
Query Performance#
Both are fast. The performance story is nuanced:
DuckDB wins on:
- Complex analytical queries on a single machine
- Ad-hoc analysis against files (CSV, Parquet)
- Queries that benefit from vectorized CPU execution
- Small-to-medium datasets (up to hundreds of GB)
ClickHouse wins on:
- High-throughput ingestion (millions of rows/second)
- Concurrent queries from dozens of users
- Extremely large datasets (terabytes to petabytes)
- Time-series and event data with high cardinality
On a single-machine benchmark with a 100GB dataset, DuckDB and ClickHouse are comparable. DuckDB sometimes wins due to better SQL optimization; ClickHouse sometimes wins due to its primary key-based pruning.
When to Choose DuckDB#
Choose DuckDB when:
- You're building an embedded analytics feature — analytics inside an app, not a separate service
- You need local-first analytics — data stays on the user's machine (privacy, latency, offline)
- You're a single analyst — one person or a small team doing ad-hoc analysis
- Your dataset fits on one machine — under a few hundred GB
- You want zero infrastructure — no servers to manage, no ops overhead
- You need SQL on files — query CSV/Parquet directly without loading into a database
Real examples:
- DenchClaw's CRM database (per-user, local, embedded)
- A data scientist analyzing a 10GB dataset
- An ETL pipeline in a Lambda function
- A startup's internal analytics dashboard where one process writes and a dashboard reads
When to Choose ClickHouse#
Choose ClickHouse when:
- You need to ingest millions of events/second — ClickHouse's columnar MergeTree engine handles this natively
- You have multiple applications writing simultaneously — ClickHouse supports concurrent writes
- You need multi-user analytics — dozens of analysts querying simultaneously
- Your dataset is hundreds of GB or terabytes — ClickHouse scales horizontally
- You need real-time dashboards — ClickHouse supports materialized views that update on insert
- You're running a SaaS analytics feature — ClickHouse Cloud is designed for multi-tenant analytics backends
Real examples:
- Cloudflare's DNS analytics (trillions of rows)
- Sentry's error tracking (billions of events/day)
- A SaaS product embedding analytics (PostHog uses ClickHouse)
- A fintech company's transaction analytics pipeline
Migrating Between Them#
If you start with DuckDB and outgrow it, migration to ClickHouse is straightforward via Parquet:
-- DuckDB: export to Parquet
COPY (SELECT * FROM events) TO 'events.parquet' (FORMAT PARQUET);
-- ClickHouse: import from Parquet
INSERT INTO events SELECT * FROM file('events.parquet', Parquet);The SQL dialect differences are manageable — most standard SQL works in both.
The DuckDB + ClickHouse Architecture#
For teams that need both, a common pattern:
Raw Events → ClickHouse (ingest + storage)
↓ (export to Parquet nightly)
DuckDB (analyst workbench, ad-hoc queries)
ClickHouse handles the ingest and serves real-time dashboards. DuckDB handles the ad-hoc analysis, ML feature engineering, and local exploration by data scientists. Each tool does what it's best at.
DenchClaw's Choice#
DenchClaw uses DuckDB, not ClickHouse. The reason is simple: DenchClaw is local-first, single-user, and embedded. ClickHouse's strengths — distributed ingest, multi-user concurrency, managed cloud — aren't relevant to that use case.
For a personal CRM running on your laptop, DuckDB's zero-setup, zero-cost, zero-ops design is exactly right. When DenchClaw Cloud scales to thousands of concurrent users, the architecture will evolve — but per-user databases in DuckDB remain the right primitive.
Frequently Asked Questions#
Is ClickHouse harder to operate than DuckDB?#
Significantly. DuckDB requires zero operational overhead. ClickHouse requires server management, schema design for its MergeTree engine, shard planning, and backup configuration.
Can I use both in the same project?#
Yes. A common pattern: ClickHouse for production ingest and real-time queries, DuckDB for data science workloads and ad-hoc analysis.
Does ClickHouse support ACID transactions?#
ClickHouse has limited transaction support. It guarantees atomicity at the block level but doesn't support full ACID transactions across tables. DuckDB has full ACID compliance.
Which has better SQL compatibility?#
DuckDB follows the PostgreSQL dialect closely and supports most standard SQL features. ClickHouse has a custom SQL dialect with some differences. DuckDB generally has broader SQL compatibility.
What's the managed ClickHouse cost?#
ClickHouse Cloud starts around $50/month for small workloads and scales to thousands per month for large deployments. DuckDB is free.
Ready to try DenchClaw? Install in one command: npx denchclaw. Full setup guide →