VX-45 Validate NULL views in VarBinView - #9188
Conversation
Merging this PR will regress 2 benchmarks
|
| Mode | Benchmark | BASE |
HEAD |
Efficiency | |
|---|---|---|---|---|---|
| ❌ | Simulation | chunked_varbin_opt_to_varbinview_builder[(10, 100)] |
790.9 µs | 907.5 µs | -12.86% |
| ❌ | Simulation | slice_dict_tight_loop[10000] |
717.2 µs | 802 µs | -10.57% |
| ⚡ | Simulation | decompress[u64, (1000, 16)] |
134.7 µs | 72.1 µs | +86.71% |
| ⚡ | Simulation | take[small_m/shuffled/primitive/nonnull/chunks=16384/indices=16] |
1.3 ms | 1.2 ms | +12.7% |
| ⚡ | Simulation | take[small_m/shuffled/primitive/nonnull/chunks=16384/indices=256] |
3.7 ms | 3.4 ms | +10.54% |
| ⚡ | Simulation | compress_fsst[(10000, 64, 8)] |
10.6 ms | 9.6 ms | +10.34% |
| ⚡ | Simulation | take[small_m/shuffled/primitive/nonnull/chunks=16384/indices=1000] |
11.2 ms | 10.2 ms | +10.04% |
Tip
Investigate this regression by commenting @codspeedbot fix this regression on this PR, or directly use the CodSpeed MCP with your agent.
Comparing myrrc/varbinview-null-slots-validation (ccfc0cd) with develop (ad5de22)
Footnotes
-
51 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. ↩
2ebac36 to
0e8e404
Compare
Polar Signals Profiling ResultsLatest Run
Powered by Polar Signals Cloud |
Benchmarks: String Encoding 📖vortex / vortex-file-compressed / ms (1.000x ➖, 0↑ 0↓)
vortex / vortex-file-compressed / % (1.000x ➖, 0↑ 0↓)
|
Benchmarks: PolarSignals Profiling 📖Vortex (geomean): 0.958x ➖ datafusion / vortex-file-compressed / ns (0.958x ➖, 1↑ 0↓)
No file size changes detected. |
Benchmarks: TPC-H SF=1 on NVME 📖Verdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed / ns (1.001x ➖, 0↑ 0↓)
datafusion / vortex-compact / ns (1.003x ➖, 0↑ 0↓)
datafusion / parquet / ns (0.981x ➖, 2↑ 0↓)
duckdb / vortex-file-compressed / ns (1.006x ➖, 0↑ 0↓)
duckdb / vortex-compact / ns (0.995x ➖, 1↑ 0↓)
duckdb / parquet / ns (0.998x ➖, 0↑ 0↓)
duckdb / duckdb / ns (0.994x ➖, 0↑ 0↓)
No file size changes detected. |
Benchmarks: FineWeb NVMe 📖Verdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed / ns (0.995x ➖, 1↑ 0↓)
datafusion / vortex-compact / ns (0.997x ➖, 0↑ 0↓)
datafusion / parquet / ns (0.994x ➖, 0↑ 0↓)
duckdb / vortex-file-compressed / ns (0.961x ➖, 1↑ 1↓)
duckdb / vortex-compact / ns (1.000x ➖, 0↑ 0↓)
duckdb / parquet / ns (0.996x ➖, 0↑ 0↓)
No file size changes detected. |
Benchmarks: TPC-DS SF=1 on NVME 📖Verdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed / ns (1.002x ➖, 1↑ 1↓)
datafusion / vortex-compact / ns (1.004x ➖, 1↑ 2↓)
datafusion / parquet / ns (0.998x ➖, 0↑ 2↓)
duckdb / vortex-file-compressed / ns (1.028x ➖, 1↑ 11↓)
duckdb / vortex-compact / ns (1.026x ➖, 0↑ 9↓)
duckdb / parquet / ns (0.999x ➖, 3↑ 1↓)
duckdb / duckdb / ns (0.997x ➖, 4↑ 4↓)
No file size changes detected. |
Benchmarks: Clickbench Sorted on NVME 📖Verdict: No clear signal (environment too noisy confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed / ns (0.990x ➖, 0↑ 0↓)
datafusion / parquet / ns (0.944x ➖, 1↑ 0↓)
duckdb / vortex-file-compressed / ns (0.994x ➖, 1↑ 0↓)
duckdb / parquet / ns (0.989x ➖, 0↑ 0↓)
duckdb / duckdb / ns (0.990x ➖, 0↑ 0↓)
File Size Changes (201 files changed, +0.0% overall, 104↑ 97↓)
Totals:
|
Benchmarks: Random Access 📖Vortex (geomean): 1.008x ➖ vortex / vortex-file-compressed / ns (1.008x ➖, 0↑ 0↓)
vortex / parquet / ns (0.995x ➖, 0↑ 0↓)
vortex / lance / ns (1.005x ➖, 0↑ 0↓)
|
Benchmarks: Statistical and Population Genetics 📖Verdict: No clear signal (low confidence) How to read Verdict and Engines
duckdb / vortex-file-compressed / ns (0.927x ➖, 4↑ 1↓)
duckdb / vortex-compact / ns (0.961x ➖, 3↑ 2↓)
duckdb / parquet / ns (1.000x ➖, 0↑ 0↓)
No file size changes detected. |
Benchmarks: FineWeb S3 📖Verdict: No clear signal (environment too noisy confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed / ns (0.985x ➖, 0↑ 0↓)
datafusion / vortex-compact / ns (1.005x ➖, 0↑ 0↓)
datafusion / parquet / ns (1.078x ➖, 0↑ 0↓)
duckdb / vortex-file-compressed / ns (0.933x ➖, 1↑ 0↓)
duckdb / vortex-compact / ns (0.974x ➖, 0↑ 0↓)
duckdb / parquet / ns (0.765x ➖, 1↑ 0↓)
|
Benchmarks: Clickbench on NVME 📖Verdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed / ns (1.011x ➖, 0↑ 3↓)
datafusion / parquet / ns (1.003x ➖, 0↑ 1↓)
duckdb / vortex-file-compressed / ns (0.990x ➖, 4↑ 4↓)
duckdb / parquet / ns (1.004x ➖, 1↑ 2↓)
duckdb / duckdb / ns (1.002x ➖, 0↑ 0↓)
File Size Changes (1 files changed, -0.0% overall, 0↑ 1↓)
Totals:
|
Benchmarks: Appian on NVME 📖Verdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed / ns (1.011x ➖, 0↑ 0↓)
datafusion / parquet / ns (0.997x ➖, 0↑ 0↓)
duckdb / vortex-file-compressed / ns (1.009x ➖, 0↑ 0↓)
duckdb / parquet / ns (1.010x ➖, 0↑ 0↓)
duckdb / duckdb / ns (1.002x ➖, 0↑ 0↓)
File Size Changes (1 files changed, -0.0% overall, 0↑ 1↓)
Totals:
|
Benchmarks: TPC-H SF=10 on NVME 📖Verdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed / ns (0.998x ➖, 0↑ 0↓)
datafusion / vortex-compact / ns (0.994x ➖, 0↑ 0↓)
datafusion / parquet / ns (1.002x ➖, 0↑ 0↓)
duckdb / vortex-file-compressed / ns (1.018x ➖, 0↑ 0↓)
duckdb / vortex-compact / ns (1.043x ➖, 0↑ 2↓)
duckdb / parquet / ns (0.989x ➖, 1↑ 0↓)
duckdb / duckdb / ns (0.987x ➖, 0↑ 0↓)
No file size changes detected. |
Benchmarks: TPC-H SF=1 on S3 📖Verdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed / ns (1.086x ➖, 0↑ 1↓)
datafusion / vortex-compact / ns (1.004x ➖, 1↑ 3↓)
datafusion / parquet / ns (1.005x ➖, 0↑ 0↓)
duckdb / vortex-file-compressed / ns (0.914x ➖, 1↑ 0↓)
duckdb / vortex-compact / ns (0.986x ➖, 0↑ 1↓)
duckdb / parquet / ns (0.988x ➖, 0↑ 0↓)
|
Benchmarks: TPC-H SF=10 on S3 📖Verdict: No clear signal (environment too noisy confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed / ns (0.982x ➖, 0↑ 0↓)
datafusion / vortex-compact / ns (0.974x ➖, 0↑ 0↓)
datafusion / parquet / ns (0.914x ➖, 2↑ 0↓)
duckdb / vortex-file-compressed / ns (1.017x ➖, 0↑ 0↓)
duckdb / vortex-compact / ns (0.985x ➖, 0↑ 0↓)
duckdb / parquet / ns (0.979x ➖, 0↑ 0↓)
|
Benchmarks: Vortex queries 📖Verdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed / ns (1.008x ➖, 0↑ 0↓)
datafusion / parquet / ns (1.002x ➖, 0↑ 0↓)
duckdb / vortex-file-compressed / ns (1.082x ➖, 0↑ 1↓)
duckdb / parquet / ns (1.004x ➖, 0↑ 0↓)
No file size changes detected. |
Benchmarks: Compression 📖vortex / vortex-file-compressed / ns (0.999x ➖, 1↑ 2↓)
vortex / vortex-file-compressed / bytes (1.000x ➖, 0↑ 0↓)
vortex / vortex-file-compressed / ratio (0.989x ➖, 3↑ 2↓)
vortex / parquet / ns (1.016x ➖, 0↑ 0↓)
vortex / parquet / bytes (1.000x ➖, 0↑ 0↓)
|
|
We've talked with @joseph-isaacs and decided to take another approach to this problem. Currently we may reject vortex files which aren't technically valid but our specification doesn't forbid this explicitly. Another solution is to rewrite all NULL views with an empty view. |
Signed-off-by: Mikhail Kot <mikhail@spiraldb.com>
0e8e404 to
ccfc0cd
Compare
| @@ -168,7 +169,7 @@ impl VTable for VarBinView { | |||
|
|
|||
Views in Validity::AllInvalid and null views in Validity::Array weren't validated which could lead to OOB reads.