array tree layout#7952
Conversation
Merging this PR will degrade performance by 14.28%
|
| Mode | Benchmark | BASE |
HEAD |
Efficiency | |
|---|---|---|---|---|---|
| ❌ | Simulation | new_alp_prim_test_between[f32, 16384] |
103.8 µs | 118.7 µs | -12.51% |
| ❌ | Simulation | new_alp_prim_test_between[f32, 32768] |
153.2 µs | 182.4 µs | -16.02% |
Tip
Investigate this regression by commenting @codspeedbot fix this regression on this PR, or directly use the CodSpeed MCP with your agent.
Comparing os/array-tree-layout (20d8b2e) with develop (52e26d1)
Signed-off-by: Onur Satici <onur@spiraldb.com>
Signed-off-by: Onur Satici <onur@spiraldb.com>
Signed-off-by: Onur Satici <onur@spiraldb.com>
Signed-off-by: Onur Satici <onur@spiraldb.com>
Signed-off-by: Onur Satici <onur@spiraldb.com>
195519d to
20d8b2e
Compare
Polar Signals Profiling ResultsLatest Run
Powered by Polar Signals Cloud |
Benchmarks: FineWeb NVMeVerdict: No clear signal (low confidence) datafusion / vortex-file-compressed (0.997x ➖, 0↑ 0↓)
datafusion / vortex-compact (0.991x ➖, 0↑ 0↓)
datafusion / parquet (0.981x ➖, 1↑ 0↓)
duckdb / vortex-file-compressed (0.952x ➖, 1↑ 0↓)
duckdb / vortex-compact (1.019x ➖, 0↑ 1↓)
duckdb / parquet (1.016x ➖, 0↑ 1↓)
Full attributed analysis
|
File Sizes: FineWeb NVMeNo file size changes detected. |
Benchmarks: PolarSignals ProfilingVortex (geomean): 1.029x ➖ datafusion / vortex-file-compressed (1.029x ➖, 0↑ 1↓)
|
File Sizes: PolarSignals ProfilingNo file size changes detected. |
Benchmarks: TPC-H SF=1 on NVMEVerdict: No clear signal (low confidence) datafusion / vortex-file-compressed (0.968x ➖, 0↑ 0↓)
datafusion / vortex-compact (0.971x ➖, 0↑ 0↓)
datafusion / parquet (0.986x ➖, 1↑ 2↓)
datafusion / arrow (0.974x ➖, 1↑ 0↓)
duckdb / vortex-file-compressed (0.986x ➖, 0↑ 0↓)
duckdb / vortex-compact (0.975x ➖, 0↑ 0↓)
duckdb / parquet (0.989x ➖, 2↑ 1↓)
duckdb / duckdb (0.972x ➖, 0↑ 0↓)
Full attributed analysis
|
File Sizes: TPC-H SF=1 on NVMENo file size changes detected. |
Benchmarks: TPC-DS SF=1 on NVMEVerdict: No clear signal (low confidence) datafusion / vortex-file-compressed (1.000x ➖, 1↑ 3↓)
datafusion / vortex-compact (1.007x ➖, 1↑ 2↓)
datafusion / parquet (0.993x ➖, 2↑ 0↓)
duckdb / vortex-file-compressed (0.988x ➖, 2↑ 0↓)
duckdb / vortex-compact (1.024x ➖, 0↑ 13↓)
duckdb / parquet (0.995x ➖, 0↑ 0↓)
duckdb / duckdb (1.157x ❌, 0↑ 84↓)
Full attributed analysis
|
File Sizes: TPC-DS SF=1 on NVMENo file size changes detected. |
Benchmarks: FineWeb S3Verdict: No clear signal (environment too noisy confidence) datafusion / vortex-file-compressed (1.149x ➖, 0↑ 2↓)
datafusion / vortex-compact (0.797x ➖, 2↑ 0↓)
datafusion / parquet (1.005x ➖, 0↑ 0↓)
duckdb / vortex-file-compressed (1.012x ➖, 0↑ 0↓)
duckdb / vortex-compact (1.057x ➖, 0↑ 0↓)
duckdb / parquet (1.030x ➖, 0↑ 0↓)
Full attributed analysis
|
Benchmarks: Statistical and Population GeneticsVerdict: No clear signal (low confidence) duckdb / vortex-file-compressed (1.011x ➖, 0↑ 0↓)
duckdb / vortex-compact (1.012x ➖, 0↑ 0↓)
duckdb / parquet (1.019x ➖, 0↑ 0↓)
Full attributed analysis
|
File Sizes: Statistical and Population GeneticsNo file size changes detected. |
Benchmarks: Random AccessVortex (geomean): 0.836x ✅ unknown / unknown (0.877x ✅, 20↑ 0↓)
|
Benchmarks: TPC-H SF=10 on NVMEVerdict: No clear signal (low confidence) datafusion / vortex-file-compressed (0.996x ➖, 0↑ 0↓)
datafusion / vortex-compact (1.001x ➖, 0↑ 0↓)
datafusion / parquet (0.995x ➖, 0↑ 0↓)
datafusion / arrow (0.967x ➖, 0↑ 0↓)
duckdb / vortex-file-compressed (0.994x ➖, 0↑ 0↓)
duckdb / vortex-compact (1.002x ➖, 0↑ 0↓)
duckdb / parquet (0.998x ➖, 0↑ 0↓)
duckdb / duckdb (0.997x ➖, 0↑ 0↓)
Full attributed analysis
|
File Sizes: TPC-H SF=10 on NVMENo file size changes detected. |
Benchmarks: Clickbench on NVMEVerdict: No clear signal (low confidence) datafusion / vortex-file-compressed (0.955x ➖, 4↑ 1↓)
datafusion / parquet (0.940x ➖, 7↑ 0↓)
duckdb / vortex-file-compressed (0.917x ➖, 11↑ 0↓)
duckdb / parquet (0.967x ➖, 2↑ 0↓)
duckdb / duckdb (0.939x ➖, 5↑ 0↓)
Full attributed analysis
|
File Sizes: Clickbench on NVMEFile Size Changes (1 files changed, -0.0% overall, 0↑ 1↓)
Totals:
|
Benchmarks: TPC-H SF=1 on S3Verdict: No clear signal (environment too noisy confidence) datafusion / vortex-file-compressed (1.186x ➖, 0↑ 4↓)
datafusion / vortex-compact (1.126x ➖, 0↑ 2↓)
datafusion / parquet (1.019x ➖, 0↑ 1↓)
duckdb / vortex-file-compressed (1.046x ➖, 0↑ 0↓)
duckdb / vortex-compact (1.009x ➖, 0↑ 1↓)
duckdb / parquet (1.000x ➖, 0↑ 0↓)
Full attributed analysis
|
Benchmarks: CompressionVortex (geomean): 0.991x ➖ unknown / unknown (0.965x ➖, 12↑ 0↓)
|
Benchmarks: TPC-H SF=10 on S3Verdict: No clear signal (environment too noisy confidence) datafusion / vortex-file-compressed (0.966x ➖, 1↑ 1↓)
datafusion / vortex-compact (0.978x ➖, 0↑ 1↓)
datafusion / parquet (1.081x ➖, 0↑ 3↓)
duckdb / vortex-file-compressed (0.939x ➖, 0↑ 0↓)
duckdb / vortex-compact (0.936x ➖, 0↑ 0↓)
duckdb / parquet (0.898x ➖, 0↑ 0↓)
Full attributed analysis
|
Summary
Introduce array tree layout that gathers the array tree flatbuffer definitions as a vortex array in a segment that resides just before the zone map segments. This supersedes the env var to embed the array trees into the footer.
env var is still supported but deprecated.
API Changes
vortex_layout::VTable::new_readergains actx: &LayoutReaderContextparameter. Out-of-tree implementors must add this one argument; intermediate layouts
forward
ctxto recursiveLayout::new_reader_in_ctxcalls on children, leaves can ignoreit. Migration is adding that new ctx parameter per impl.
FLAT_LAYOUT_INLINE_ARRAY_NODE=1env var continues to populateFlatLayout::array_treeinline metadata as before, but now emits a one-shottracing::warnon first read directing users atwith_array_tree(true). Will be removedonce downstream tooling has migrated.