Skip to content

feat(bench): run the random access benchmark against S3 - #9412

Merged
robert3005 merged 16 commits into
developfrom
claude/random-access-s3-benchmark-f9zi6a
Oct 5, 2026
Merged

robert3005 merged 16 commits into
developfrom
claude/random-access-s3-benchmark-f9zi6a

Conversation

@joseph-isaacs

@joseph-isaacs joseph-isaacs commented Aug 14, 2026 •

Copy link
Copy Markdown
Contributor

Summary

The random-access benchmark only ever read its data from local NVMe, which hides the cost that matters most for point lookups: how many bytes and round trips a format needs against an object store. This adds an S3 variant of the same benchmark so Vortex, Parquet, and Lance random access can be tracked against remote storage, both on develop and on demand for PRs.

The synthetic Parquet files keep the parquet-rs default row group and page sizes; only the codec (zstd level 3, from #10157) is set.

Changes

  • random-access-bench gains --remote-data-dir s3://bucket/prefix/ and --prepare-data. Data is materialized locally as before, uploaded verbatim, and then opened through object_store (Vortex and Parquet) or Lance's own s3:// provider. Remote measurements are named ...-tokio-s3 and tagged with s3 storage so they form a separate series from the local-disk numbers. Arrow IPC has no object-store reader and is skipped for remote runs.
  • v3 ingest records have no storage field and their measurement ID hashes only commit, dataset, format and open mode, so S3 runs use an -s3 dataset suffix (e.g. taxi-s3/uniform). This keeps them from overwriting the local-disk rows without a schema change; local-disk IDs are unchanged.
  • vortex-bench adds RemoteDataDir, which maps a local data path to its object key, plus open_object_store constructors for the Vortex and Parquet accessors. The Parquet accessor keeps its cached footer and re-opens through a boxed AsyncFileReader on each take, so the local and object-store paths share one read path.
  • CI: new pr-bench-random-access-s3.yml reusable workflow, wired into pr-bench-dispatch.yml behind the action/bench-random-access-s3 label and action/bench-all. pr-bench-runner.yml learns variant_id and remote_data_dir inputs, uploads the data before the run and deletes it afterwards. develop-bench.yml gains a Random Access (S3) matrix entry that refreshes s3://vortex-ci-benchmark-datasets/develop/random-access/ on every run.
  • lance-bench enables Lance's aws feature so Dataset::open accepts s3:// URIs.
  • Docs: README section for running against S3 and the new label in the benchmarking guide.

Unit tests cover the key and URI mapping of RemoteDataDir and the separate S3 ingest dataset.

🤖 Generated with Claude Code

https://claude.ai/code/session_01L627uApatcD62FGrQPutCL

@codspeed

codspeed Bot commented Aug 14, 2026 •

Copy link
Copy Markdown

Merging this PR will not alter performance

⚠️ Unknown Walltime execution environment detected

Using the Walltime instrument on standard Hosted Runners will lead to inconsistent data.

For the most accurate results, we recommend using CodSpeed Macro Runners: bare-metal machines fine-tuned for performance measurement consistency.

✅ 2097 untouched benchmarks
⏩ 503 skipped benchmarks1


Comparing claude/random-access-s3-benchmark-f9zi6a (294c5cb) with develop (900c1f2)

Open in CodSpeed

Footnotes

  1. 503 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. ↩

@github-actions

github-actions Bot commented Aug 14, 2026 •

Copy link
Copy Markdown
Contributor

Polar Signals Profiling Results

Latest Run

Status Commit Job Attempt Link
🟢 Done 70eb08b random-access-bench 1 Explore Profiling Data
Previous Runs (5)
Status Commit Job Attempt Link
🟢 Done 645fe98 random-access-bench 1 Explore Profiling Data
🟢 Done 836c5bf random-access-bench 1 Explore Profiling Data
🟢 Done 8055869 random-access-bench 1 Explore Profiling Data
🟢 Done 552c49a random-access-bench 1 Explore Profiling Data
🟢 Done 0e297f8 random-access-bench 1 Explore Profiling Data

Powered by Polar Signals Cloud

@github-actions

github-actions Bot commented Aug 14, 2026 •

Copy link
Copy Markdown
Contributor

Benchmarks: Random Access (S3) 📖

Commits: PR 70eb08b0 vs base none
Vortex (geomean): no vortex data
Parquet (geomean): no parquet data

No baseline is available for this benchmark yet; PR measurements are shown without comparison.


random-access / vortex-file-compressed / ns (no group data, 0↑ 0↓)
name ns (PR / base / %diff)
random-access/feature-vectors/correlated/vortex-tokio-s3 47953915 / — / no baseline
random-access/feature-vectors/correlated/vortex-tokio-s3-footer 113687797 / — / no baseline
random-access/feature-vectors/uniform/vortex-tokio-s3 77592776 / — / no baseline
random-access/feature-vectors/uniform/vortex-tokio-s3-footer 151387996 / — / no baseline
random-access/nested-lists/correlated/vortex-tokio-s3 41774617 / — / no baseline
random-access/nested-lists/correlated/vortex-tokio-s3-footer 77823414 / — / no baseline
random-access/nested-lists/uniform/vortex-tokio-s3 160045822 / — / no baseline
random-access/nested-lists/uniform/vortex-tokio-s3-footer 194900681 / — / no baseline
random-access/nested-structs/correlated/vortex-tokio-s3 49094499 / — / no baseline
random-access/nested-structs/correlated/vortex-tokio-s3-footer 109996692 / — / no baseline
random-access/nested-structs/uniform/vortex-tokio-s3 167950542 / — / no baseline
random-access/nested-structs/uniform/vortex-tokio-s3-footer 246989245 / — / no baseline
random-access/taxi/correlated/vortex-tokio-s3 74811782 / — / no baseline
random-access/taxi/correlated/vortex-tokio-s3-footer 169460062 / — / no baseline
random-access/taxi/uniform/vortex-tokio-s3 186749208 / — / no baseline
random-access/taxi/uniform/vortex-tokio-s3-footer 230272320 / — / no baseline
random-access/vortex-tokio-s3 71468905 / — / no baseline
random-access/vortex-tokio-s3-footer 119107828 / — / no baseline
random-access / parquet / ns (no group data, 0↑ 0↓)
name ns (PR / base / %diff)
random-access/feature-vectors/correlated/parquet-tokio-s3 191870176481 / — / no baseline
random-access/feature-vectors/correlated/parquet-tokio-s3-footer 181825101369 / — / no baseline
random-access/feature-vectors/uniform/parquet-tokio-s3 201393524742 / — / no baseline
random-access/feature-vectors/uniform/parquet-tokio-s3-footer 254835388021 / — / no baseline
random-access/nested-lists/correlated/parquet-tokio-s3 1024296733 / — / no baseline
random-access/nested-lists/correlated/parquet-tokio-s3-footer 1104270259 / — / no baseline
random-access/nested-lists/uniform/parquet-tokio-s3 1023889230 / — / no baseline
random-access/nested-lists/uniform/parquet-tokio-s3-footer 1106422212 / — / no baseline
random-access/nested-structs/correlated/parquet-tokio-s3 452879984 / — / no baseline
random-access/nested-structs/correlated/parquet-tokio-s3-footer 532563240 / — / no baseline
random-access/nested-structs/uniform/parquet-tokio-s3 452361019 / — / no baseline
random-access/nested-structs/uniform/parquet-tokio-s3-footer 528013212 / — / no baseline
random-access/parquet-tokio-s3 482777972 / — / no baseline
random-access/parquet-tokio-s3-footer 535689992 / — / no baseline
random-access/taxi/correlated/parquet-tokio-s3 717050498 / — / no baseline
random-access/taxi/correlated/parquet-tokio-s3-footer 796102429 / — / no baseline
random-access/taxi/uniform/parquet-tokio-s3 801481767 / — / no baseline
random-access/taxi/uniform/parquet-tokio-s3-footer 841172818 / — / no baseline
random-access / lance / ns (no group data, 0↑ 0↓)
name ns (PR / base / %diff)
random-access/feature-vectors/correlated/lance-tokio-s3 32413998 / — / no baseline
random-access/feature-vectors/correlated/lance-tokio-s3-footer 188253864 / — / no baseline
random-access/feature-vectors/uniform/lance-tokio-s3 79217490 / — / no baseline
random-access/feature-vectors/uniform/lance-tokio-s3-footer 217445408 / — / no baseline
random-access/lance-tokio-s3 60135569 / — / no baseline
random-access/lance-tokio-s3-footer 254931214 / — / no baseline
random-access/nested-lists/correlated/lance-tokio-s3 32066815 / — / no baseline
random-access/nested-lists/correlated/lance-tokio-s3-footer 215556667 / — / no baseline
random-access/nested-lists/uniform/lance-tokio-s3 78813691 / — / no baseline
random-access/nested-lists/uniform/lance-tokio-s3-footer 264404124 / — / no baseline
random-access/nested-structs/correlated/lance-tokio-s3 43594269 / — / no baseline
random-access/nested-structs/correlated/lance-tokio-s3-footer 227072945 / — / no baseline
random-access/nested-structs/uniform/lance-tokio-s3 115356636 / — / no baseline
random-access/nested-structs/uniform/lance-tokio-s3-footer 273513501 / — / no baseline
random-access/taxi/correlated/lance-tokio-s3 75576425 / — / no baseline
random-access/taxi/correlated/lance-tokio-s3-footer 242886615 / — / no baseline
random-access/taxi/uniform/lance-tokio-s3 261223774 / — / no baseline
random-access/taxi/uniform/lance-tokio-s3-footer 547413121 / — / no baseline

@codecov

codecov Bot commented Aug 14, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 83.16%. Comparing base (15c73f3) to head (552c49a).
⚠️ Report is 2 commits behind head on develop.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@joseph-isaacs
joseph-isaacs requested a review from AdamGS August 17, 2026 09:00
@github-actions

github-actions Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

This PR has been marked as stale because it has been open for 14 days with no activity. Please comment or remove the stale label if you wish to keep it active, otherwise it will be closed in 7 days

@github-actions github-actions Bot added the stale This PR is stale and will be auto-closed soon label Sep 4, 2026
@joseph-isaacs
joseph-isaacs force-pushed the claude/random-access-s3-benchmark-f9zi6a branch from 8692404 to 42f46ab Compare September 4, 2026 01:59
@github-actions github-actions Bot removed the stale This PR is stale and will be auto-closed soon label Sep 14, 2026
@github-actions

Copy link
Copy Markdown
Contributor

This PR has been marked as stale because it has been open for 14 days with no activity. Please comment or remove the stale label if you wish to keep it active, otherwise it will be closed in 7 days

@github-actions github-actions Bot added the stale This PR is stale and will be auto-closed soon label Sep 28, 2026
Adds an S3 variant of the random-access benchmark. It is the same benchmark
and the same code paths, only the data is read from an object store instead
of local NVMe:

- `--remote-data-dir s3://bucket/prefix/` opens the Vortex, Parquet and Lance
  files from S3, mirroring the local data directory layout;
- `--prepare-data` materializes the local files (and prints their paths) so
  CI can upload them before the run;
- remote measurements are suffixed `-tokio-s3` and reported with `s3` storage
  so they form a separate series from the local-disk numbers.

CI runs it from a new `pr-bench-random-access-s3.yml` workflow (label
`action/bench-random-access-s3`, also covered by `action/bench-all`) and from
a new `Random Access (S3)` entry in the develop benchmark matrix. The shared
PR benchmark runner gained `remote_data_dir` and `variant_id` inputs; it
uploads the data to a per-run S3 prefix, runs the benchmark against it, and
deletes the prefix afterwards.

Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
`lance` is pinned with `default-features = false`, which drops the `aws`
feature it enables by default. Without it Lance has no `s3://` object store
provider registered and opening a remote dataset fails with:

    Invalid user input: No object store provider found for scheme: 's3'

Parquet and Vortex already read from S3 fine; only Lance was affected.

Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
… files

Every synthetic random-access dataset holds 1,000,000 rows and was written
with default writer properties, whose `max_row_group_size` is 1Mi rows. A
million rows never crosses that threshold, so each file is a single row
group. Readers select row groups before rows, so a point lookup fetches and
decodes the entire file: masked by page cache locally, ruinous over an object
store, where one `take` on feature-vectors spends ~87s moving ~4GB.

The tell is in the measurements: nested-lists and nested-structs take the
same time under both access patterns to within 0.04%, because the indices
never change what is read.

Size row groups from the row width instead, targeting 128MiB and clamping to
8-64 batches of 1024 rows. The clamp is what fixes narrow rows: a pure byte
budget would still leave nested-lists in one group. Sizes stay whole
multiples of the 1024-row Arrow batches that `parquet_to_vortex_chunks`
streams, so row group boundaries never split a batch and the derived Vortex
files are unchanged -- only Parquet layout moves. Data pages also drop from
20k to 1024 rows, giving the page index resolution worth having here.

Scan-oriented generators (TPC-H, SpatialBench, PolarSignals, ...) keep large
row groups, which is right for full scans.

This shifts Parquet random-access baselines once, most visibly on the
correlated pattern. Uniform lookups still touch most row groups; only
page-level row selection in the reader addresses those.

Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
`set_max_row_group_size` is deprecated in favour of
`set_max_row_group_row_count`, which takes an `Option<usize>` where `None`
means unlimited. The deprecation warning fails the lint job.

Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
Rebasing onto develop picked up parquet 59, which deprecates
`ParquetObjectReader` in favour of a hand-rolled `AsyncFileReader`. Keep the
existing reader so the measured I/O path stays fixed against the numbers
already collected, but scope the deprecation to its three uses rather than
silencing warnings for the crate.

Also moves `take_row_groups` above the test module that develop added, which
`clippy::items_after_test_module` rejects.

Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017xmiM7RPQBBN9ycUXegLDv
@joseph-isaacs
joseph-isaacs force-pushed the claude/random-access-s3-benchmark-f9zi6a branch from 42f46ab to e5cdea3 Compare September 30, 2026 09:47
@joseph-isaacs joseph-isaacs removed the stale This PR is stale and will be auto-closed soon label Sep 30, 2026 — with Claude
Every other benchmark data generator sets zstd level 3 explicitly, since
parquet-rs writes uncompressed by default. The three random-access generators
were the remaining exception, so their files were uncompressed.

Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017xmiM7RPQBBN9ycUXegLDv
…workflow

Add the action/bench-random-access-s3 label to the benchmarking guide's
list of on-demand CI benchmarks, and drop a stray double blank line in the
PR benchmark runner workflow.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L627uApatcD62FGrQPutCL
Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
@joseph-isaacs
joseph-isaacs marked this pull request as ready for review September 30, 2026 10:58
@github-actions
github-actions Bot temporarily deployed to docs-preview/pr-9412 September 30, 2026 11:08 Inactive
@github-actions

github-actions Bot commented Sep 30, 2026 •

Copy link
Copy Markdown
Contributor

Benchmarks: Random Access 📖

Commits: PR 70eb08b0 vs base 400064c5
Verdict: No clear signal (environment too noisy confidence)
Attributed Vortex impact: +5.3%
Engines: random-access No clear signal (+5.3%, environment too noisy confidence)
Vortex (geomean): hot 1.015x ➖
Parquet (geomean): hot 0.964x ➖
Shifts: Parquet (control) -3.6% · Median polish +0.6%

How to read Verdict and Engines
  • Verdict: Overall PR-level signal after subtracting baseline drift estimated from Parquet control rows. It can be Likely improvement, Likely regression, or No clear signal.
  • Engines: Per-engine attribution. DataFusion is compared against DataFusion/Parquet controls; DuckDB is compared against DuckDB/Parquet controls. This answers whether each engine improved or regressed independently.
  • Confidence: Based on directional consistency, share of rows above the noise floor, and control-run noise.
  • Hot vs cold: Every measurement is run several times. The first run is reported as the cold run, and the median of the runs after it is reported as the hot run. The verdict and significance use hot runs; each target's geomean reports hot and cold beside each other where the individual runs were recorded and hot alone where they were not, the cold column shows first-run cost per row, and hot/cold is how much of each run the warm path saves. Rows whose results predate per-run reporting show only one value, taken from the value the runner reported.
  • Table cells: Each cell reads PR / base / %diff. The hot and cold columns mark a change as 🔴 slower or 🟢 faster once it clears this suite's threshold; anything smaller is noise here and is left unmarked, as is hot/cold, because a shift in the warm-up ratio is not a win or a loss by itself.

vortex / arrow-ipc / ns (1.053x ➖, 0↑ 3↓)
name ns (PR / base / %diff)
random-access/arrow-tokio-local-disk 71173 / 70927 / +0.3%
random-access/arrow-tokio-local-disk-footer 166506 / 163393 / +1.9%
random-access/feature-vectors/correlated/arrow-tokio-local-disk 2577457 / 2562903 / +0.6%
random-access/feature-vectors/correlated/arrow-tokio-local-disk-footer 3322226 / 3344851 / -0.7%
random-access/feature-vectors/uniform/arrow-tokio-local-disk 33610825 / 31721233 / +6.0%
random-access/feature-vectors/uniform/arrow-tokio-local-disk-footer 33841802 / 32079510 / +5.5%
random-access/nested-lists/correlated/arrow-tokio-local-disk 63177 / 56475 / +11.9% 🔴
random-access/nested-lists/correlated/arrow-tokio-local-disk-footer 108882 / 101429 / +7.3%
random-access/nested-lists/uniform/arrow-tokio-local-disk 1247352 / 1171147 / +6.5%
random-access/nested-lists/uniform/arrow-tokio-local-disk-footer 1252226 / 1154547 / +8.5%
random-access/nested-structs/correlated/arrow-tokio-local-disk 55828 / 51780 / +7.8%
random-access/nested-structs/correlated/arrow-tokio-local-disk-footer 99447 / 87628 / +13.5% 🔴
random-access/nested-structs/uniform/arrow-tokio-local-disk 918604 / 832289 / +10.4% 🔴
random-access/nested-structs/uniform/arrow-tokio-local-disk-footer 961297 / 875855 / +9.8%
random-access/taxi/correlated/arrow-tokio-local-disk 120368 / 116193 / +3.6%
random-access/taxi/correlated/arrow-tokio-local-disk-footer 221826 / 218696 / +1.4%
random-access/taxi/uniform/arrow-tokio-local-disk 2858354 / 2779482 / +2.8%
random-access/taxi/uniform/arrow-tokio-local-disk-footer 3020180 / 3018137 / +0.1%
random-access / vortex-file-compressed / ns (1.015x ➖, 0↑ 0↓)
name ns (PR / base / %diff)
random-access/feature-vectors/correlated/vortex-tokio-local-disk 247447 / 247013 / +0.2%
random-access/feature-vectors/correlated/vortex-tokio-local-disk-footer 1242996 / 1264002 / -1.7%
random-access/feature-vectors/uniform/vortex-tokio-local-disk 1469524 / 1454460 / +1.0%
random-access/feature-vectors/uniform/vortex-tokio-local-disk-footer 2761384 / 2663594 / +3.7%
random-access/nested-lists/correlated/vortex-tokio-local-disk 217803 / 207452 / +5.0%
random-access/nested-lists/correlated/vortex-tokio-local-disk-footer 381902 / 355287 / +7.5%
random-access/nested-lists/uniform/vortex-tokio-local-disk 735256 / 743620 / -1.1%
random-access/nested-lists/uniform/vortex-tokio-local-disk-footer 968829 / 927844 / +4.4%
random-access/nested-structs/correlated/vortex-tokio-local-disk 271040 / 278998 / -2.9%
random-access/nested-structs/correlated/vortex-tokio-local-disk-footer 531226 / 530619 / +0.1%
random-access/nested-structs/uniform/vortex-tokio-local-disk 690676 / 633260 / +9.1%
random-access/nested-structs/uniform/vortex-tokio-local-disk-footer 980682 / 943915 / +3.9%
random-access/taxi/correlated/vortex-tokio-local-disk 675039 / 675578 / -0.1%
random-access/taxi/correlated/vortex-tokio-local-disk-footer 1475749 / 1462838 / +0.9%
random-access/taxi/uniform/vortex-tokio-local-disk 2670819 / 2627013 / +1.7%
random-access/taxi/uniform/vortex-tokio-local-disk-footer 3834659 / 3795711 / +1.0%
random-access/vortex-tokio-local-disk 450447 / 463229 / -2.8%
random-access/vortex-tokio-local-disk-footer 1085342 / 1107487 / -2.0%
random-access / parquet / ns (0.964x ➖, 2↑ 0↓)
name ns (PR / base / %diff)
random-access/feature-vectors/correlated/parquet-tokio-local-disk 107602078213 / 113052687353 / -4.8%
random-access/feature-vectors/correlated/parquet-tokio-local-disk-footer 107977055168 / 161202991408 / -33.0% 🟢
random-access/feature-vectors/uniform/parquet-tokio-local-disk 113323054095 / 107097352610 / +5.8%
random-access/feature-vectors/uniform/parquet-tokio-local-disk-footer 113758998251 / 161930623319 / -29.7% 🟢
random-access/nested-lists/correlated/parquet-tokio-local-disk 145235801 / 145934198 / -0.5%
random-access/nested-lists/correlated/parquet-tokio-local-disk-footer 145455256 / 147727175 / -1.5%
random-access/nested-lists/uniform/parquet-tokio-local-disk 145249687 / 148151983 / -2.0%
random-access/nested-lists/uniform/parquet-tokio-local-disk-footer 145987938 / 148069975 / -1.4%
random-access/nested-structs/correlated/parquet-tokio-local-disk 45042095 / 43944363 / +2.5%
random-access/nested-structs/correlated/parquet-tokio-local-disk-footer 45620087 / 44065367 / +3.5%
random-access/nested-structs/uniform/parquet-tokio-local-disk 45038361 / 43973021 / +2.4%
random-access/nested-structs/uniform/parquet-tokio-local-disk-footer 45187929 / 44148609 / +2.4%
random-access/parquet-tokio-local-disk 119027725 / 118765899 / +0.2%
random-access/parquet-tokio-local-disk-footer 119238157 / 120467448 / -1.0%
random-access/taxi/correlated/parquet-tokio-local-disk 178998816 / 178029046 / +0.5%
random-access/taxi/correlated/parquet-tokio-local-disk-footer 178825380 / 178252049 / +0.3%
random-access/taxi/uniform/parquet-tokio-local-disk 192869331 / 188469507 / +2.3%
random-access/taxi/uniform/parquet-tokio-local-disk-footer 193087229 / 192394172 / +0.4%
random-access / lance / ns (1.010x ➖, 0↑ 0↓)
name ns (PR / base / %diff)
random-access/feature-vectors/correlated/lance-tokio-local-disk 297876 / 294130 / +1.3%
random-access/feature-vectors/correlated/lance-tokio-local-disk-footer 1298560 / 1247448 / +4.1%
random-access/feature-vectors/uniform/lance-tokio-local-disk 1044989 / 1033519 / +1.1%
random-access/feature-vectors/uniform/lance-tokio-local-disk-footer 2065257 / 2005088 / +3.0%
random-access/lance-tokio-local-disk 533300 / 533620 / -0.1%
random-access/lance-tokio-local-disk-footer 1516099 / 1505435 / +0.7%
random-access/nested-lists/correlated/lance-tokio-local-disk 156903 / 159072 / -1.4%
random-access/nested-lists/correlated/lance-tokio-local-disk-footer 744252 / 744224 / +0.0%
random-access/nested-lists/uniform/lance-tokio-local-disk 864457 / 855410 / +1.1%
random-access/nested-lists/uniform/lance-tokio-local-disk-footer 1422421 / 1430869 / -0.6%
random-access/nested-structs/correlated/lance-tokio-local-disk 273714 / 273336 / +0.1%
random-access/nested-structs/correlated/lance-tokio-local-disk-footer 649704 / 644058 / +0.9%
random-access/nested-structs/uniform/lance-tokio-local-disk 2289040 / 2283144 / +0.3%
random-access/nested-structs/uniform/lance-tokio-local-disk-footer 2714517 / 2642395 / +2.7%
random-access/taxi/correlated/lance-tokio-local-disk 770797 / 758462 / +1.6%
random-access/taxi/correlated/lance-tokio-local-disk-footer 2094599 / 2045204 / +2.4%
random-access/taxi/uniform/lance-tokio-local-disk 8224014 / 8207128 / +0.2%
random-access/taxi/uniform/lance-tokio-local-disk-footer 9211216 / 9148944 / +0.7%

The Arrow IPC accessor only reads local disk, so the S3 variant was
reporting local-disk timings under the arrow-tokio-s3 name. Refuse the
format when a remote data dir is set and leave it out of the CI split.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L627uApatcD62FGrQPutCL
Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
@github-actions
github-actions Bot temporarily deployed to docs-preview/pr-9412 September 30, 2026 13:48 Inactive
@joseph-isaacs joseph-isaacs added the action/bench-random-access Run only the random-access benchmark on this PR label Sep 30, 2026
@github-actions github-actions Bot removed the action/bench-random-access Run only the random-access benchmark on this PR label Sep 30, 2026
The three synthetic random-access generators (feature_vectors,
nested_lists, nested_structs) wrote Parquet with default writer
properties: uncompressed and, since every dataset is under the 1Mi-row
default, one row group per file. Readers select row groups before rows,
so a point lookup had to decode the whole file.

Write them with 32Ki-row row groups, 1024-row data pages and zstd level 3,
matching the other benchmark data generators. The row group size is a
whole multiple of the 1024-row batches the Parquet-to-Vortex conversion
reads, so the derived Vortex files are byte-identical.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L627uApatcD62FGrQPutCL
Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
…-access-s3-benchmark-f9zi6a

Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>

# Conflicts:
#	vortex-bench/src/random_access/mod.rs
@joseph-isaacs
joseph-isaacs changed the base branch from develop to ji/random-access-parquet-row-groups September 30, 2026 14:13
@github-actions
github-actions Bot temporarily deployed to docs-preview/pr-9412 September 30, 2026 14:22 Inactive
joseph-isaacs and others added 2 commits September 30, 2026 14:38
…arquet

Only the codec changes: zstd level 3 like the other generators. Row group
and data page sizes stay at the parquet-rs defaults.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L627uApatcD62FGrQPutCL
Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
…-access-s3-benchmark-f9zi6a

Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
@github-actions
github-actions Bot temporarily deployed to docs-preview/pr-9412 September 30, 2026 14:51 Inactive
Base automatically changed from ji/random-access-parquet-row-groups to develop October 1, 2026 13:26
…ss-s3-benchmark-f9zi6a

Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>

# Conflicts:
#	vortex-bench/src/random_access/mod.rs
@github-actions
github-actions Bot temporarily deployed to docs-preview/pr-9412 October 1, 2026 13:37 Inactive
@github-actions
github-actions Bot temporarily deployed to docs-preview/pr-9412 October 1, 2026 13:53 Inactive
@joseph-isaacs joseph-isaacs added action/bench-random-access Run only the random-access benchmark on this PR action/bench-random-access-s3 labels Oct 1, 2026
@github-actions github-actions Bot removed action/bench-random-access Run only the random-access benchmark on this PR action/bench-random-access-s3 labels Oct 1, 2026
joseph-isaacs and others added 2 commits October 2, 2026 09:02
v3 random-access records carry no storage field, and their measurement
ID hashes only commit, dataset, format and open mode. The develop S3
run would therefore share IDs with, and overwrite, the local-disk rows.
Give S3 runs an `-s3` dataset suffix (e.g. `taxi-s3/uniform`) so they
form their own series without a schema change; local-disk IDs are
unchanged.

Also drop the cosmetic job name added to develop-bench.yml.

Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L627uApatcD62FGrQPutCL
Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
…ss-s3-benchmark-f9zi6a

Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
@robert3005
robert3005 merged commit 38b17f8 into develop Oct 5, 2026
95 checks passed
@robert3005
robert3005 deleted the claude/random-access-s3-benchmark-f9zi6a branch October 5, 2026 12:16

This branch was successfully deployed

1 active deployment
docs-preview/pr-9412 — 294c5cb0 Deployed Oct 2, 2026 by github-actions[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants