New: prepared statements, UPDATE and DELETE, and key lookups that seek — 0.143 ms through the gateway.Read the update

Compare · DuckDB

Equal answers. Not yet equal speed.

Five TPC-H queries, the same generated data, answers compared decimal for decimal. UltraFabric's columnar collections are 11–46× slower than DuckDB on one thread on a shared development host. Three weeks earlier it was 137–1 408×.

Measured

The table from the report

Source: the TPC-H columnar report of 22 October 2026, commit a69b309, median of three including planning. Host: shared development host, 3 CPUs / 6 GB; indicative, not a production promise. Data: TPC-H SF 0.1, lineitem 600 572 rows.

TPC-H SF 0.1, seconds

Row storage, columnar collections, DuckDB 1.1.3 one thread

QueryRow storageColumnarColumnar gainDuckDB 1 threadColumnar vs DuckDBAnswers
Q10.8690.3082.8×0.012824×equal
Q30.710.1664.3×0.008520×equal
Q50.8960.3632.5×0.007846×equal
Q60.5350.0747.3×0.00236×equal
Q100.7710.2453.1×0.022911×equal
Row Columnar DuckDB
0.0010.010.11Row Q1: 0.869 sColumnar Q1: 0.308 sDuckDB Q1: 0.0128 sQ1Row Q3: 0.71 sColumnar Q3: 0.166 sDuckDB Q3: 0.0085 sQ3Row Q5: 0.896 sColumnar Q5: 0.363 sDuckDB Q5: 0.0078 sQ5Row Q6: 0.535 sColumnar Q6: 0.074 sDuckDB Q6: 0.002 sQ6Row Q10: 0.771 sColumnar Q10: 0.245 sDuckDB Q10: 0.0229 sQ10

How the gap closed, 21–22 Oct

Seconds per query across four executor and storage phases

Q1 Q6 Q10
0.02.34.6P2cP2dP2eP3c
  • 21 Oct, first run: 137–1 408× DuckDB; the phase gate (3×) recorded as missed.
  • Projected scans and typed decimals: 1.9–3.5× faster.
  • Vectorised expressions and batch aggregation: 3.7–6.1× faster than the first run.
  • 22 Oct, columnar collections: 11–46× DuckDB. The analytics page lists what remains.
Honest reading

Where DuckDB is ahead

A comparison that hides the other side's strengths is advertising. These are the points a buyer would find anyway.

11–46× faster on one thread

On every one of the five queries. The gap is the executor: per-row validity vectors, row-at-a-time hash joins and group keys, no SIMD, a single thread. Reading two columns of lineitem's row groups takes about 15 ms, so storage is no longer the limit.

Parallel execution

DuckDB uses every core; UltraFabric's executor is single-threaded today. The 21 October report records DuckDB three-thread times as well, and they are lower still on most queries.

Full SQL

Subqueries, WITH, window functions, DISTINCT and HAVING all fail on UltraFabric with SQLSTATE 0A000 today. DuckDB runs the whole TPC-H suite; UltraFabric runs five hand-selected queries.

Zero setup

DuckDB is an in-process library. UltraFabric is a node and a gateway with token login, which is the point of it, and also more to run.

What UltraFabric adds

What DuckDB does not offer

Built and tested today, not planned.

Tenant isolation verified on every plan

Each query runs over a security chain the verifier checked for the requester's tenant and clearance. 994 405 paired-database checks in the ten-million-plan campaign found no interference.

Built

Row and columnar under one verifier

The same table syntax, the same SQL subset and the same check, whether a table is stored as rows for records or as column chunks for facts.

Built

Durable, transactional writes

A write-ahead log with group commit and snapshot-isolation transactions sit under the analytic tables; an INSERT is on disk before it is acknowledged.

Built

A network service over the PostgreSQL protocol

psql and drivers connect with a token verified at the gateway and again at the node.

Built
Compatibility

Status today

Not compatible, and not trying to be

UltraFabric speaks the PostgreSQL protocol, not DuckDB's API, and runs a small SQL subset. In the benchmark tool, DuckDB 1.1.3 generates the data with its dbgen and supplies the reference answers: decimals must match exactly and averages within a relative 1e-9. The five queries are hand-written plans in UltraFabric's plan language, verified, optimised and re-verified exactly as the node does, then executed; DuckDB's time is per query excluding process start, median of three.

Why compare with DuckDB's single-thread time?

UltraFabric's executor runs on one thread today, so the one-thread figure is the fair comparison. The 21 October report also records DuckDB on three threads; the gap to that figure is larger.

Did the 3× gate pass?

No. The phase gate asked for the TPC-H subset within 3× of DuckDB on one node. It is missed by 11–46× today, down from 137–1 408×. The decision record keeps the goal and re-measures at each step.

Is DuckDB used inside UltraFabric?

Only in the benchmark tool: DuckDB generates the TPC-H data (dbgen) and provides the answers every UltraFabric result is compared with. It is not part of the database.

Run the same benchmark yourself.

Every report names its commit, tool invocation and raw result file. Early-access teams receive the scripts with the build.