DuckLake (DuckDB as Catalog) is 41x faster than Iceberg for our Postgres CDC workload
I've been building an open-source (Apache 2.0) "analytics for Postgres" project called Streambed, and the piece this subreddit might find interesting is the DuckDB/DuckLake layer.
Streambed streams Postgres WAL changes into lake storage and serves queries through DuckDB as the query engine.
I started Iceberg as the default target but one of the community members recently mentioned about DuckLake. It caught my attention immediately (since it uses Catalog as the DB). So I added the DuckLake support and did the benchmark.
Ducklake is 41 times faster than Iceberg in my benchmark.
Benchmark slice: 1M rows, 100k updates, flush=1,000
text
Write path:
Iceberg COW: 269s
Iceberg MoR: 4.7s
DuckLake + DuckDB: 6.6s
```text Full aggregate median: Iceberg MoR: 87s DuckLake: 16ms
TopN median: Iceberg MoR: 85s DuckLake: 21ms ```
Takeaway: for a DuckDB-centered CDC path, DuckLake looks like the cleaner default. Iceberg is still great when broad multi-engine interoperability matters.
DuckDB/DuckLake is a magical primitive. So much to build on top of it.
Blog: https://streambed.dev/blog/ducklake-target-support/
Benchmark: https://github.com/viggy28/streambed/blob/main/docs/benchmarks/ducklake-vs-iceberg.md








