Skip to content

Benchmark · Historical kernel and query-path timings · Different measurement boundaries · Selected SpatialBench workloads

8DB spatial | 14.7 ms vs. 140–13,140 ms for GIS tools

Six million locations, recorded GIS-tool comparisons, competitor timeouts and the broader opportunity of an omnimodal spatial engine.

Published
Reading time5 minutes
SpatialSpatialBenchPerformanceOmnimodal

Six million locations filtered in 14.7 ms by 8DB's preloaded kernel. The same campaign recorded 140 ms for DuckDB, 470 ms for SedonaDB and 13,140 ms for GeoPandas query paths.

These are recorded results with different measurement boundaries: 8DB times filtering and counting prepared coordinates; the reconstructed competitor paths include reading and returning query results. The comparison below shows the tested versions and scope.

For teams building location-aware applications, there are two stories worth exploring: how quickly the spatial core can run, and what becomes possible when location lives beside the rest of the application's data.

Five seconds, twenty-four seconds, or a ten-minute cutoff

SpatialBench Q12 asks for the five nearest buildings to each trip pickup. The May 7 SF1 campaign used six million trips and 20,000 buildings on a reported AWS m7i.2xlarge with eight vCPUs and 32 GB RAM.

Recorded Q12 pathReported elapsed timeRecorded outcome
8DB R-tree kernel5.20 sCounted 30 million candidate pairs
SedonaDB 0.3.0 query23.88 sReported 30 million result rows
DuckDB 1.5.2 query600-second cutoffTimed out
GeoPandas 1.1.3 query600-second cutoffTimed out

Ten minutes without a completed answer matters when a workflow is waiting on the result. Here, the timeout applies to the tested DuckDB and GeoPandas configurations; SedonaDB completed the query.

Open the original nearest-neighbor timing chart.

For 8DB, the 5.20-second result demonstrates a fast candidate-search path. Its timer excludes preparation, and the recovered implementation counts neighbors from a building bounding-box index rather than returning the full ordered polygon-distance result. Thirty million pairs is the expected count, but does not prove the same neighbor identities. These differences prevent translating the table into a matched full-query speedup. Original campaign report.

The engineering opportunity is to carry that low kernel cost through the complete application operation, including loading, exact geometry and returned results.

May 7, 2026 · SF1 · m7i.2xlarge · 8 vCPUs / 32GB

Nearest buildings: completed paths and cutoffs

Seconds, lower is better. Completed recorded paths use the zero-to-30 scale below.

8DB R-tree kernel · 5.2 s

Preparation excluded; 30M candidate pairs counted from bounding-box neighbors. Ordered polygon-distance result not validated.

SedonaDB 0.3.0 · 23.88 s

Query path; report records 30M result rows.

Uncompleted at the campaign’s 600-second cutoff

DuckDB 1.5.2 and GeoPandas 1.1.3 timed out. These are cutoff observations, not completed runtimes, and are not drawn as 600-second result bars.

Kernel and query measurements perform different work. No matched full-query speedup is inferred. Exact instance harness and raw result files remain unrecovered. Retained campaign report; scope and reconstructed timing boundaries are explained in the article.

Six million locations filtered in 14.7 milliseconds

The same campaign's Q1 radius filter provides another useful view of the spatial core.

Recorded implementationReported mean
8DB preloaded filter/count kernel14.7 ms
DuckDB 1.5.2 query140 ms
SedonaDB 0.3.0 query470 ms
GeoPandas 1.1.3 query13,140 ms

All four reported 94 matches. The elapsed-time gaps are substantial. The kernel/query distinction matters here too: 8DB counts preloaded coordinates, while the reconstructed upstream comparator harness reads from Parquet-backed inputs and materializes query results inside its timer. This reconstruction follows the documented upstream recipe; the exact instance copy remains unverified. The figures therefore describe the recorded paths, not a matched full-query speedup.

Open the original radius-filter chart.

A fleet dashboard repeatedly filtering resident coordinates has a different latency budget from a first query over files. The 14.7 ms result speaks to the former; a cold-file comparison must also charge loading and decoding.

May 7, 2026 · SF1 · m7i.2xlarge · 8 vCPUs / 32GB

Six million locations: radius-filter references

Milliseconds, lower is better. Fixed zero-to-15,000 scale; very short bars retain their numerical labels.

8DB kernel · 14.7 ms

Preloaded coordinates; filter and count. 94 matches reported.

DuckDB 1.5.2 · 140 ms

Query path; Parquet-backed inputs and returned results in reconstructed timer. 94 matches.

SedonaDB 0.3.0 · 470 ms

Query path; Parquet-backed inputs and result conversion in reconstructed timer. 94 matches.

GeoPandas 1.1.3 · 13,140 ms

Query path includes loading, filtering, sorting and projected results. 94 matches.

Kernel and query measurements perform different work. No matched full-query speedup is inferred. Exact instance harness and raw result files remain unrecovered. Retained campaign report; scope and reconstructed timing boundaries are explained in the article.

A different representation changes the performance question

The SF1 report also records a later Hilbert-window candidate path at 0.77 seconds, compared with the original 5.20-second R-tree path. That result is exploratory: neighbor identity and recall were not validated. It shows a promising search strategy to qualify, not an established accuracy-equivalent improvement.

A separate May 8 experiment explored five paths on an M1 Pro with 16 GB RAM and AC power. Its 41 million TLC-derived records used repeated zone-centroid locations. Across three recorded trials per path, the means ranged from 18.40 seconds for R-tree to 2.51 seconds for MERA.

Open the original candidate-path chart.

This is a different dataset and hardware configuration from SF1. Neighbor identities and recall remain unvalidated, and full build-and-output costs need separate accounting. The useful insight is that representation can materially change execution time; matching answer quality is the next test. May 8 report.

Separate May 8 experiment · M1 Pro / 16GB / AC power

Five candidate paths, with every recorded trial

Approximately 41M TLC-derived trips with repeated zone-centroid locations. Mean seconds, lower is better.

R-tree · 18.4 s

Three recorded trials: 18.8904 s · 18.0725 s · 18.2304 s

Hilbert · 4.83 s

Three recorded trials: 4.9710 s · 4.8607 s · 4.6490 s

H3 · 7.17 s

Three recorded trials: 7.4682 s · 7.0997 s · 6.9526 s

MERA · 2.51 s

Three recorded trials: 2.6971 s · 2.4102 s · 2.4086 s

Adaptive Hilbert · 7.68 s

Three recorded trials: 8.1914 s · 7.5396 s · 7.2946 s

Internal exploration, not a matched-accuracy ranking. Neighbor identities and recall remain unvalidated; full build and output costs require separate accounting. Same counts do not establish the same neighbors. Retained report with trial outputs.

Where the specialists fit

The published September 2025 SpatialBench reference supplies broader context on the same named instance class. Its full-query timings include loading Parquet from S3, using different versions from our local campaign.

Published SF1 resultSedonaDB 0.1.0DuckDB 1.4.0GeoPandas 1.1.1
Q1 radius filter0.66 s0.96 s12.78 s
Q12 nearest-neighbor join14.55 sErrorTimeout

The published timeout is 1,200 seconds, distinct from our campaign's 600-second limit. Errors and timeouts describe those tested versions and configurations. The table is a separate reference, not a matched ranking against 8DB's kernels. Published results and methodology.

Capability matters alongside speed. PostGIS offers 3D predicates, n-D bounding-box indexing and advanced geometry through SFCGAL. DuckDB represents Z/M geometry, while SedonaDB has geometry and raster functions. We have no matched PostGIS timing in this recovered campaign. PostGIS indexing, advanced geometry, DuckDB geometry, SedonaDB functions.

Location is one part of the decision

8DB is an omnimodal database. Our spatial source review found n-dimensional metric and in-memory index primitives, point-cloud region and nearest-neighbor queries, multiband raster operations, and persistent GeoQL local charts. Their integration and validation maturity differ; these benchmarks do not measure all those capabilities or establish complete GIS parity.

Consider selecting a service vehicle. Location finds nearby candidates. Telemetry tells you which are available. History informs reliability. Relationships identify the technician with the right certification. Spatial performance becomes more valuable when it helps answer that whole question.

Keeping these operations within one engine could reduce synchronization work, duplicated data and delays between a new observation and a useful answer. Those are deployment-dependent opportunities, not measured savings from this campaign. The relevant comparison is the complete workflow, including the capabilities and integrations needed to deliver it.

Our articles on key-value performance, time-series ingestion and analytical querying explore other native modalities and their own measured conditions.

The spatial results give us something worth building on: a millisecond filtering core, seconds-scale candidate search and several representation choices. Bring us the location query your application needs, its dataset size and its freshness requirement. Include the returned geometry or neighbor identities your application must receive. Let's compare the full path from spatial data to a decision.

Continue reading

The next layer of the argument.

Benchmark

Database Performance in Context

8DB analytics | How we compare, and what else you get

Historical analytical query results beside ClickHouse, DuckDB, StarRocks, Doris and PostgreSQL references, plus the broader opportunity of an omnimodal engine.

6 min readHistorical server-path timings · Cross-campaign market context · Two selected analytical queriesRead article
Benchmark

Database Performance in Context

8DB graph lookups | 64× Neo4j’s recorded throughput

218,000 lookups per second for 8DB. A best recorded 3,410 for Neo4j. Both on an M1 laptop. A separate one-hop test also put 8DB ahead, reaching 23,300 queries per second.

12 min readHistorical service comparisons · Simplified queries · Different clients and returned-data contractsRead article
Benchmark

Database Performance in Context

8DB storage | Keep working when the connection disappears

16,384 records captured offline. 16,512 verified after delivery and reopening. Explore what protected local storage can do for an application that must keep working.

7 min readVendor-run telemetry rehearsal · Separate historical storage tests · Larger recovery campaign unfinishedRead article