feat(vortex-geo): geometry Bbox zone-map statistic + distance-filter pruning#8561
feat(vortex-geo): geometry Bbox zone-map statistic + distance-filter pruning#8561HarukiMoriarty wants to merge 3 commits into
Bbox zone-map statistic + distance-filter pruning#8561Conversation
Signed-off-by: Nemo Yu <zyu379@wisc.edu>
Merging this PR will not alter performance
|
| Mode | Benchmark | BASE |
HEAD |
Efficiency | |
|---|---|---|---|---|---|
| ❌ | Simulation | chunked_bool_canonical_into[(1000, 10)] |
16.3 µs | 26.8 µs | -39.12% |
| ❌ | Simulation | chunked_varbinview_canonical_into[(100, 100)] |
224.2 µs | 259.6 µs | -13.64% |
| ❌ | Simulation | chunked_varbinview_into_canonical[(100, 100)] |
271.4 µs | 306.7 µs | -11.52% |
| ⚡ | Simulation | chunked_varbinview_into_canonical[(1000, 10)] |
205.6 µs | 169 µs | +21.64% |
| ⚡ | Simulation | bitwise_not_vortex_buffer_mut[128] |
273.6 ns | 244.4 ns | +11.93% |
Tip
Investigate this regression by commenting @codspeedbot fix this regression on this PR, or directly use the CodSpeed MCP with your agent.
Comparing nemo/geo-bounds-zonemap (d789886) with develop (aeae579)
Footnotes
-
4 benchmarks were skipped, so the baseline results were used instead. If they were deleted from the codebase, click here and archive them to remove them from the performance reports. ↩
The zoned writer serializes each zone stat descriptor to persist it, but GeometryBounds used the default (non-serializable), so writing a geometry column zone map failed at write time. Add serialize/deserialize (no options) plus a regression test. Signed-off-by: Nemo Yu <zyu379@wisc.edu>
Summary
Adds spatial chunk-pruning to Vortex. A new
GeometryBoundsaggregate stores a per-chunk minimum bounding box (MBR) as a zone-map statistic, and a stats-rewrite rule uses it to skip chunks that cannot satisfy aST_Distance(geom, const) <= rfilter.Limitation
<=/<are pruned.>/>=are soundly prunable via the symmetric farthest-corner bound but are intentionally omitted (rarely?)Testing
8 new vortex-geo tests. Point bbox across batches; Polygon bbox over all ring vertices, empty group → null, and registry self-declaration. only <=/< prune while >/>=/==/!= don't (parameterized), distance symmetry, non-distance comparisons ignored, and an end-to-end falsify.