Latest Results
perf(vortex-geo): short-circuit predicates with bounding boxes (#9076)
## Rationale for this change
Constant-vs-column geometry predicates currently run the exact spatial
predicate for every valid row, even when the constant and row bounding
rectangles already prove that the result is false. For complex constant
geometries and spatially selective queries, this repeats substantially
more work than necessary.
## What changes are included in this PR?
- Add an optional bounding-rectangle pre-check to the shared
null-propagating binary geometry executor.
- Short-circuit `vortex.geo.intersects` when operand rectangles are
disjoint.
- Short-circuit `vortex.geo.contains` when the container rectangle
cannot cover the contained rectangle, preserving operand order.
- Keep `vortex.geo.distance` on exact evaluation because rectangles
cannot determine the result.
- Preserve null propagation and fall back to exact evaluation for empty
geometries or overlapping rectangles.
- Add regression coverage for short-circuiting, nulls, operand order,
empty geometries, exact-result equivalence, containment, and distance.
- Add the `predicate_bbox` Divan microbenchmark.
### Microbenchmark
Command:
```bash
cargo bench -p vortex-geo --bench predicate_bbox -- --min-time 0.1 --sample-count 10
```
The benchmark evaluates 8,192 points against a 128-vertex constant
polygon. Median results:
| Predicate / workload | Exact | Bounding-box pre-check | Change |
| --- | ---: | ---: | ---: |
| `contains`, disjoint | 689.0 us | 16.87 us | 40.8x faster |
| `contains`, candidate | 674.4 us | 667.4 us | 1.0% faster |
| `intersects`, disjoint | 670.5 us | 16.79 us | 39.9x faster |
| `intersects`, candidate | 653.5 us | 670.4 us | 2.6% slower |
---------
Signed-off-by: Nemo Yu <zyu379@wisc.edu> perf(onpair): adopt onpair 0.2 storage-backed dictionary and safety-only validation (#9117)
## Rationale for this change
`onpair` 0.2 allows to build a `CompactDictionary` over caller-owned
buffers, and `validate_safety`, which checks only the safety invariants
rather than full semantic well-formedness. Adopting both makes OnPair
file reads **1.25x faster**.
## What changes are included in this PR?
- Bump `onpair` 0.1.1 → 0.2.0.
- `OnPairData` memoizes a `CompactDictionary<OnPairDictionaryStorage>`
over the existing Vortex
buffers (no copying), and validates it with `validate_safety`.
- New `OnPair::try_new_with_data` lets `OnPairScheme::compress` carry
that cache through the
child-compression rebuild instead of discarding it.
- Replaces the local `DEFAULT_DICT12_CONFIG` with the re-exported
`onpair::DEFAULT_CONFIG`
(identical values), and drops the redundant `OnPairData::len`.
`string-bench` `vortex` suite, median of 3 interleaved runs, FSST as an
untouched control:
| `read` (ms) | develop | this PR | Change |
| --- | --- | --- | ---: |
| `clickbench/URL/shard-0` `onpair-12` | 12.95 | 10.36 | **−20.0%** |
| `tpch/l_comment` `onpair-12` | 32.96 | 26.29 | **−20.2%** |
| `clickbench/URL/shard-0` `fsst` | 17.41 | 17.35 | −0.3% |
| `tpch/l_comment` `fsst` | 26.63 | 26.32 | −1.2% |
Encoded size is byte-identical; write times are unchanged.
## What APIs are changed? Are there any user-facing changes?
None. The on-disk format is unchanged (golden tests pass unmodified),
and `vortex-onpair` is gated
behind `unstable_encodings` with `vortex-btrblocks` as its only in-tree
consumer. Within that
crate, `OnPairData::new` loses its `len` parameter, `OnPairData::len` /
`is_empty` are removed, and
`OnPair::try_new_with_data` is new.
---------
Signed-off-by: Francesco Gargiulo <gargiulo.fr@gmail.com>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> Latest Branches
+34%
+12%
0%
© 2026 CodSpeed Technology