Split TableStrategy dispatcher from StructStrategy#8638
Conversation
TableStrategy dispatcher from StructStrategy
897d3a1 to
3c8f648
Compare
Merging this PR will not alter performance
|
| Mode | Benchmark | BASE |
HEAD |
Efficiency | |
|---|---|---|---|---|---|
| ❌ | Simulation | chunked_varbinview_opt_canonical_into[(1000, 10)] |
169.6 µs | 206.2 µs | -17.74% |
| ❌ | Simulation | chunked_varbinview_into_canonical[(1000, 10)] |
169.3 µs | 205.5 µs | -17.63% |
| ❌ | Simulation | chunked_varbinview_opt_into_canonical[(1000, 10)] |
183.4 µs | 219.6 µs | -16.48% |
| ❌ | Simulation | slice_empty_vortex |
339.4 ns | 397.8 ns | -14.66% |
| ⚡ | Simulation | bitwise_not_vortex_buffer_mut[128] |
244.4 ns | 215.3 ns | +13.55% |
| ⚡ | Simulation | chunked_varbinview_into_canonical[(100, 100)] |
306.4 µs | 271.6 µs | +12.82% |
| ⚡ | Simulation | bitwise_not_vortex_buffer_mut[1024] |
304.7 ns | 275.6 ns | +10.58% |
Tip
Investigate this regression by commenting @codspeedbot fix this regression on this PR, or directly use the CodSpeed MCP with your agent.
Comparing mk/table-struct-dispatch (dd326c3) with develop (890704f)
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. ↩
Signed-off-by: Matt Katz <mhkatz97@gmail.com>
3c8f648 to
dd326c3
Compare
Polar Signals Profiling ResultsLatest Run
Powered by Polar Signals Cloud |
Benchmarks: PolarSignals ProfilingVortex (geomean): 0.944x ➖ How to read Verdict and Engines
datafusion / vortex-file-compressed (0.944x ➖, 2↑ 0↓)
No file size changes detected. |
Benchmarks: TPC-H SF=1 on NVMEVerdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed (1.032x ➖, 0↑ 0↓)
datafusion / vortex-compact (1.040x ➖, 0↑ 0↓)
datafusion / parquet (1.021x ➖, 1↑ 0↓)
datafusion / arrow (1.044x ➖, 0↑ 1↓)
duckdb / vortex-file-compressed (1.026x ➖, 0↑ 0↓)
duckdb / vortex-compact (1.020x ➖, 0↑ 0↓)
duckdb / parquet (1.000x ➖, 1↑ 1↓)
duckdb / duckdb (1.015x ➖, 0↑ 0↓)
File Size Changes (10 files changed, -0.1% overall, 6↑ 4↓)
Totals:
|
Benchmarks: FineWeb NVMeVerdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed (0.909x ➖, 4↑ 0↓)
datafusion / vortex-compact (0.956x ➖, 1↑ 0↓)
datafusion / parquet (0.910x ➖, 2↑ 0↓)
duckdb / vortex-file-compressed (0.936x ➖, 1↑ 1↓)
duckdb / vortex-compact (0.974x ➖, 0↑ 0↓)
duckdb / parquet (0.929x ➖, 2↑ 0↓)
File Size Changes (1 files changed, +0.0% overall, 1↑ 0↓)
Totals:
|
Benchmarks: TPC-DS SF=1 on NVMEVerdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed (0.996x ➖, 0↑ 1↓)
datafusion / vortex-compact (1.001x ➖, 1↑ 0↓)
datafusion / parquet (1.002x ➖, 2↑ 4↓)
duckdb / vortex-file-compressed (0.994x ➖, 0↑ 1↓)
duckdb / vortex-compact (0.998x ➖, 0↑ 3↓)
duckdb / parquet (1.002x ➖, 1↑ 1↓)
duckdb / duckdb (1.000x ➖, 2↑ 1↓)
File Size Changes (6 files changed, +0.1% overall, 4↑ 2↓)
Totals:
|
Benchmarks: Statistical and Population GeneticsVerdict: No clear signal (low confidence) How to read Verdict and Engines
duckdb / vortex-file-compressed (0.959x ➖, 0↑ 0↓)
duckdb / vortex-compact (0.981x ➖, 0↑ 0↓)
duckdb / parquet (0.992x ➖, 0↑ 0↓)
File Size Changes (1 files changed, -0.0% overall, 0↑ 1↓)
Totals:
|
🚨🚨🚨❌❌❌ SQL BENCHMARK FAILED ❌❌❌🚨🚨🚨Benchmark |
Benchmarks: FineWeb S3Verdict: No clear signal (environment too noisy confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed (0.819x ➖, 2↑ 1↓)
datafusion / vortex-compact (0.992x ➖, 0↑ 1↓)
datafusion / parquet (0.980x ➖, 0↑ 0↓)
duckdb / vortex-file-compressed (0.971x ➖, 0↑ 0↓)
duckdb / vortex-compact (0.893x ➖, 0↑ 0↓)
duckdb / parquet (0.957x ➖, 0↑ 0↓)
|
Benchmarks: Clickbench Sorted on NVMEVerdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed (1.157x ❌, 0↑ 9↓)
datafusion / parquet (1.085x ➖, 0↑ 4↓)
duckdb / vortex-file-compressed (1.035x ➖, 0↑ 1↓)
duckdb / parquet (1.034x ➖, 0↑ 0↓)
duckdb / duckdb (1.015x ➖, 0↑ 0↓)
File Size Changes (201 files changed, -0.0% overall, 95↑ 106↓)
Totals:
|
Benchmarks: TPC-H SF=10 on NVMEVerdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed (0.994x ➖, 0↑ 0↓)
datafusion / vortex-compact (1.000x ➖, 0↑ 0↓)
datafusion / parquet (0.997x ➖, 0↑ 0↓)
datafusion / arrow (0.853x ✅, 16↑ 0↓)
duckdb / vortex-file-compressed (0.996x ➖, 0↑ 0↓)
duckdb / vortex-compact (0.996x ➖, 0↑ 0↓)
duckdb / parquet (0.994x ➖, 0↑ 0↓)
duckdb / duckdb (0.993x ➖, 0↑ 0↓)
File Size Changes (26 files changed, +0.0% overall, 14↑ 12↓)
Totals:
|
Benchmarks: Clickbench on NVMEVerdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed (0.989x ➖, 1↑ 2↓)
datafusion / parquet (1.008x ➖, 1↑ 2↓)
duckdb / vortex-file-compressed (0.970x ➖, 3↑ 1↓)
duckdb / parquet (0.968x ➖, 0↑ 0↓)
duckdb / duckdb (0.970x ➖, 0↑ 0↓)
File Size Changes (108 files changed, +0.0% overall, 59↑ 49↓)
Totals:
|
Benchmarks: Appian on NVMEVerdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed (1.005x ➖, 0↑ 0↓)
datafusion / parquet (1.003x ➖, 0↑ 0↓)
duckdb / vortex-file-compressed (1.001x ➖, 0↑ 0↓)
duckdb / parquet (1.008x ➖, 0↑ 0↓)
duckdb / duckdb (1.011x ➖, 0↑ 0↓)
File Size Changes (4 files changed, -0.1% overall, 0↑ 4↓)
Totals:
|
Benchmarks: TPC-H SF=10 on S3Verdict: No clear signal (environment too noisy confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed (0.985x ➖, 0↑ 1↓)
datafusion / vortex-compact (0.929x ➖, 1↑ 0↓)
datafusion / parquet (1.125x ➖, 0↑ 4↓)
duckdb / vortex-file-compressed (0.901x ➖, 0↑ 0↓)
duckdb / vortex-compact (0.919x ➖, 0↑ 0↓)
duckdb / parquet (0.870x ➖, 0↑ 0↓)
|
Benchmarks: Random AccessVortex (geomean): 1.006x ➖ How to read Verdict and Engines
unknown / unknown (1.007x ➖, 0↑ 1↓)
|
Benchmarks: CompressionVortex (geomean): 1.002x ➖ How to read Verdict and Engines
unknown / unknown (0.959x ➖, 22↑ 3↓)
|
Splits the
TableStrategywriter into a dtype and override dependent dispatcher, and a struct writer.StructStrategy— a structural writer that only shreds struct streams. It transposes a struct chunk stream into one ordered stream per field (plus validity when nullable) and writes each through a child strategy resolved by direct field name (field_writersentry, elsedefault; validity throughvalidity). It is intentionally dtype-unaware and knows nothing about nested dtypes or field-path overrides; it bails on non-struct input.TableStrategy— now a dispatcher.write_streamroutes on the stream's dtype and configured per-field overrides.TableStrategycontinues to own the field-path overrides and resolves the per-field child strategies before handing them toStructStrategy.This lets the writer dispatch different layout kinds per dtype — e.g. a list layout for list columns when a list strategy is configured — instead of
TableStrategyhard-coding struct shredding as its only nested behavior.