FlureeLabs
Benchmark ReportMarch 30, 2026·Fluree Engineering

SPARQLoscope DBLP Benchmark Results

105 SPARQL queries on real-world data — Fluree vs. 7 other engines. Full results, methodology, and replication instructions.

0.95s
Arithmetic mean
#1 overall
0.28s
Geometric mean
#2 overall, #1 read-write
0%
Failed queries
105 of 105 completed
18
Differentiating features
Most of any engine
BenchmarksKnowledge GraphsSPARQL

We ran the SPARQLoscope DBLP evaluation on Fluree — 105 SPARQL queries against the DBLP computer science bibliography. We compared our results against published data for seven other engines from the SPARQLoscope project.

We did not run the other engines ourselves. Their numbers come from the SPARQLoscope evaluation published by the University of Freiburg. We ran only Fluree, on the same dataset and queries, and placed our results alongside theirs.

Download the full results: fluree-benchmark-results.csv

Replicate it: github.com/fluree/sparqloscope-benchmark — clone, run one command, compare.


Speed Rankings

Geometric Mean (seconds, lower is better)

Across all 105 queries, with penalty factor P=2 applied to timed-out queries (180s timeout × 2 = 360s penalty):

RankEngineGeo Meanvs FlureeFailed Queries
1QLever0.176s0.62× faster0%
2Fluree0.282s0%
3Virtuoso0.485s1.72× slower4.8%
4Mdb1.260s4.5× slower0%
5GraphDB5.796s20.6× slower0%
6Blazegraph13.350s47.3× slower14.3%
7Jena15.288s54.2× slower18.1%
8Oxigraph38.570s136.8× slower43.8%

QLever is a read-only engine — it cannot write, update, or delete data. Among engines that support writes, Fluree has the lowest geometric mean.

Arithmetic Mean (seconds, lower is better)

The arithmetic mean is sensitive to slow outliers and reflects total workload time:

RankEngineArith Meanvs Fluree
1Fluree0.951s
2QLever1.243s1.31× slower
3Mdb9.770s10.3× slower
4Virtuoso20.851s21.9× slower
5GraphDB26.229s27.6× slower
6Blazegraph81.136s85.3× slower
7Jena94.207s99.1× slower
8Oxigraph177.355s186.5× slower

Median (seconds, lower is better)

RankEngineMedian
1QLever0.181s
2Fluree0.203s
3Virtuoso0.536s
4Mdb2.522s
5GraphDB11.387s
6Blazegraph16.803s
7Jena33.044s
8Oxigraph81.883s

Query Completion

Fluree and QLever are the only two engines to complete all 105 queries within the 180-second timeout.


Results by Category

Joins

0.05–0.85s

3-way chain joins in 0.20s

GraphDB 81.5s, Jena 180s+. xlarge joins under 50ms.

Aggregations

0.05–4.1s

Complex aggregates in 0.29s

GraphDB 15.5s, Jena 44s. GROUP_CONCAT 4.1s vs Blazegraph 684s.

Graph Patterns

0.10–1.5s

OPTIONAL 3-chain in 0.20s

Jena 125s, Blazegraph 996s. OPTIONAL, MINUS, EXISTS, UNION all fast.

Transitive Paths

0.05–1.15s

Large path+join in 1.15s

QLever 13.5s, Mdb 39.1s. Fastest engine on path+join workloads.

String Operations

0.06–7.0s

Competitive with QLever

Jena 33–35s, Oxigraph 70–80s. Covers strlen, strstarts, strends.

Regex

0.06–9.8s

Mid-pack on complex patterns

QLever 6.5–6.8s (faster). Weakest relative category — actively optimizing.

Numeric

< 0.1s

All under 100ms

No engine faster on arithmetic. abs, ceil, floor, round, filter.

Date Operations

0.05–0.09s

Essentially instant

Blazegraph 14s, Jena 3–4s. Day, month, year extraction.

Metadata

0.05–0.52s

Triple/subject/object counts

Virtuoso 180s on object count. Several competitors time out entirely.

Joins

QueryFlureeQLeverVirtuosoGraphDBBlazegraphJena
3-way chain join0.202s0.500s1.650s81.520s96.650s180s+
3-way star join0.848s1.130s1.340s24.580s81.230s63.160s
xlarge chain join0.046s0.490s0.090s0.010s0.020s0.010s
xlarge star join0.045s0.040s0.190s0.020s0.100s0.010s
2-way large-large0.598s0.180s0.540s15.540s53.490s38.940s
Multicolumn large0.895s2.010s0.770s14.060s69.120s36.540s

Aggregations (GROUP BY)

QueryFlureeQLeverGraphDBBlazegraphJenaOxigraph
Complex aggregate0.292s0.660s15.510s18.430s44.040s180.9s
COUNT high-mult0.063s0.010s13.940s0.060s180s+43.570s
COUNT low-mult2.338s0.820s19.050s96.660s139.58s87.790s
Numeric AVG0.082s0.050s1.800s3.650s1.480s2.200s
String GROUP_CONCAT4.077s18.020s40.360s684.11s123.65s182.09s

Graph Patterns (OPTIONAL, MINUS, EXISTS, UNION)

QueryFlureeQLeverVirtuosoBlazegraphJenaOxigraph
OPTIONAL 3-chain-10.201s0.890s2.340s28.450s124.98s180.92s
MINUS 3-chain-10.190s0.880s1.500s996.26s31.410s180.89s
EXISTS 3-chain-10.198s4.380s4.680s482.87s85.780s180.89s
UNION large-join1.126s1.320s1.140s92.290s168.59s180.91s

String Operations and Regex

QueryFlureeQLeverVirtuosoGraphDBJenaOxigraph
strstarts0.099s3.810s1.520s11.910s33.520s71.730s
strlen5.707s3.860s1.590s11.180s33.250s77.410s
regex-39.780s6.820s4.860s12.960s32.680s83.010s
regex-prefix-10.173s0.010s1.650s10.610s31.320s73.950s

Regex is Fluree's weakest relative category. Complex regex patterns take 6–10s. QLever and Virtuoso are faster here.

Transitive Paths

QueryFlureeQLeverVirtuosoMdbGraphDBJena
Large path+join1.150s13.470s0s39.050s12.440s180s+
Plus fixed-subject0.049s0.010s2.400s0s0.010s0.010s
Plus0.189s0.070s0.010s0.100s0.320s0.650s

Date and Numeric Operations

QueryFlureeQLeverVirtuosoGraphDBBlazegraphJena
date-day0.053s0.100s0.100s4.350s14.370s3.330s
numeric-abs0.085s0.090s0.070s2.510s3.620s1.680s
filter-bin-50/500.050s0.030s0.030s1.410s3.780s19.490s

Metadata Queries

QueryFlureeQLeverVirtuosoGraphDBBlazegraphJenaOxigraph
number-of-triples0.049s0.010s0.400s73.670s194.83s180s+154.08s
number-of-subjects0.159s0.010s174.39s206.64s67.580s180s+181.28s
number-of-objects0.137s0.010s180.22s210.13s70.710s180s+181.70s

Several engines time out entirely on metadata queries. Fluree completes all of them under 0.2s.


About this benchmark

What SPARQLoscope is

SPARQLoscope is a SPARQL evaluation framework developed at the University of Freiburg (the team behind QLever), presented at ISWC 2025. The DBLP evaluation runs 105 queries against the DBLP computer science bibliography — real-world data, not synthetic.

The queries cover joins, aggregations, filters, graph patterns (OPTIONAL, MINUS, EXISTS, UNION), string operations, regex, transitive paths, date/numeric operations, and metadata queries.

What we ran

We ran Fluree on the SPARQLoscope DBLP evaluation using Fluree's default configuration (no special tuning). The config file is committed to the benchmark repo.

What we didn't run

We did not run the other engines. Their results are from the SPARQLoscope project's published evaluation data. We used those numbers as-is. This avoids any question about whether we configured a competitor's engine fairly.

Metrics

  • Geometric mean (P=2): Timed-out queries (180s) penalized at 360s. Geometric mean computed across all 105 queries.
  • Arithmetic mean (P=2): Same penalty. Sensitive to slow outliers.
  • Median (P=2): Middle value across all 105 queries.
  • Failed queries: Percentage that did not return results within the 180s timeout.

Caveats

  • This is a single-user, read-only query benchmark. It does not test write throughput, concurrent load, or mixed workloads.
  • DBLP is a medium-scale dataset (millions of triples). Performance at larger scales may differ.
  • Regex is Fluree's weakest relative category (6–10s on complex patterns vs. QLever's 6–7s).
  • Several products are not in the SPARQLoscope evaluation (Neptune, Stardog, MarkLogic, AllegroGraph, RDFox). We cannot make speed claims about engines we haven't tested.
  • No benchmark replaces testing on your own data and queries.

Beyond query speed

This benchmark tests SPARQL query execution only. Fluree also provides capabilities that the benchmark does not measure and that most engines in the comparison do not have — immutable append-only storage with time travel queries, git-like branching and merging, content-addressed commits with W3C Verifiable Credentials, built-in HNSW vector search, BM25 full-text search, triple-level access control, AES-256-GCM encryption at rest, Apache Iceberg integration, and GeoSPARQL with S2 spatial indexing.

These are documented separately. See the Fluree developer documentation for details.


Replicate this yourself

One command

git clone https://github.com/fluree/sparqloscope-benchmark.git
cd sparqloscope-benchmark
./run-benchmark.sh

This pulls the Fluree Docker image, downloads the DBLP dataset, loads it, runs all 105 queries, and outputs results to results/fluree-results.tsv.

Requirements

  • Docker 20.10+
  • 32 GB RAM (64 GB recommended)
  • 50 GB free disk

Manual steps

git clone https://github.com/fluree/sparqloscope-benchmark.git
cd sparqloscope-benchmark

# Download DBLP dataset
cd data && ./download-dblp.sh && cd ..

# Start Fluree
docker compose up -d

# Load data
./scripts/load-data.sh

# Run queries
./scripts/run-queries.sh

# Compute metrics
python scripts/compute-metrics.py results/fluree-results.tsv

# Compare to our published results
diff results/fluree-results.tsv reference-results/fluree-2026-03-30.tsv

Download the raw data

On equivalent hardware, expect ±10–20% variance on individual queries and ±5% on aggregate metrics.

Running other engines

The SPARQLoscope project provides scripts for other engines. We didn't bundle them — running competitors yourself ensures fair configuration. See the QLever repo and the SPARQLoscope project documentation.