Guides

Local search benchmark

How much does skipping irrelevant Parquet data help a local search?

For a selective time query over 100,000 synthetic STAC items, local search took 4.2 ms with row-group pruning, compared with 411.3 ms without it in this run. Pruning means skipping blocks of data that cannot match the query. Both searches returned the same records. This compares two local scans, not local search against a provider API; downloading the inventory is excluded.

Median search latency: 411.3 milliseconds without row-group pruning and 4.2 milliseconds with pruning, over 100,000 synthetic items.

MeasurementValue
Fixture100,000 time-ordered point items, one collection
File size858,390 bytes; minimal, highly compressible metadata
Layout1,024 rows per group
QueryThe last 20 records by acquisition-time filter; no sorting
StatisticMedian of five sequential runs; OS cache may be warm
EnvironmentApple M3 Pro, 36 GiB RAM, macOS 15.5, Rust 1.88.0
BuildSuperSTAC v0.3 development code, optimized release profile
RecordedOctober 2, 2026

The baseline decodes row groups sequentially until the result limit. The optimized path consults Parquet statistics and skips groups that cannot match. The benchmark asserts that the returned IDs are identical on every repetition.

When it helps

Skipping data helps most when a query selects a small part of a time-ordered inventory. This synthetic dataset is a favorable case. Broader queries, larger records, and sorting take more work, so expect different timings on your own data.

Searches across multiple scopes or uncompacted incremental updates currently scan without pruning to handle duplicate records correctly. Compacting an updated scope lets it use pruning again. Deduplication also needs memory for the item IDs scanned.

Reproduce it

cargo test -p superstac-geoparquet --release benchmark_scoped_search -- --ignored --nocapture

The fixture is generated locally and removed afterward. There are no provider requests. Output includes the item count, file bytes, and both median latencies. Increase SUPERSTAC_BENCH_ITEMS only when you have enough memory: fixture generation currently materializes the synthetic items, unlike the bounded ingestion buffers.

Download measurements as JSON · Download the figure · Plotting script

Start with the GeoParquet notebook or read the dataset guide before measuring your own inventory.

On this page