feat(bundle): parquetbundle v3, 2x faster 1/3 memory usage - #477
Open
peymanvahidi wants to merge 31 commits into
Open
feat(bundle): parquetbundle v3, 2x faster 1/3 memory usage#477peymanvahidi wants to merge 31 commits into
peymanvahidi wants to merge 31 commits into
Conversation
Columnar codes, wide float32 projections and a CSR payload part.
Paint depth is bucketed by composePaintDepth, not continuous, so 573K slots sort in 34 ms instead of 90 ms; the comparator stays as a fallback.
573K rebuild drops from 209 ms to 13 ms; query result ordering is not contractual and does change, which reorders spiderfy angular layout.
The full bundle byte copy no longer blocks first render for user imports.
…ffsets Zero-fill absent projection coords, guard projection identity and payload names.
They are numbered by global hit, so a predicted row shifted every later one.
…longside it Restores the crash-recovery window without putting the byte copy before first paint.
Counting per protein index also fixes isolation-mode count misalignment.
CSR counts, dictionaries and wide projections back to v2-shaped tables.
Lane-based FNV-1a 64 plus a protein_ids-keyed memo; hash values unchanged.
Prefix-sums the wire's per-row counts into CSR offsets; manifest is validated, not trusted.
…types Bound num_rows, range-check evidence codes, reject id and payload-name collisions.
Name the one in-place dataset writer in the hash memo's soundness note.
An unstamped v2 output reads back as v1, so the next caller double-escaped it.
float32 flushed E-values to 0 or inf; 'none'/'NA' cells are labels, not gaps.
Also make the int64 spelling guard per value and drop the dead zero-chunk arm.
Six slots always, re-encode the core when annotations change, read_tables.
…to NA Widen CsrScores.values to match the wire format.
Retitle the v2 cell grammar as the logical layer and add version detection for 1, 2 and 3.
Generated by scripts/generate_v3_fixture.py; a superset of v2-sample.
transfer, inspect and the toxprot script take read_tables directly.
Also pins the v3-to-v2 export round trip and the shared v2 anchors.
… claims Also scope the 19%/21% figures and record the one-way version cross-check.
…rt hazards Cover the annotations re-stamp, warn on an unstamped encode, drop empty-string legend buckets, and correct three stale v3 comments.
Encoded-part drift guard plus fixture cells that separate dictionary order, both payload families, non-ASCII labels and the EAT overlay.
Collaborator
Author
|
What I'd do next is to check if we can implement the density plots to the current implementation that we have. |
Collaborator
Author
|
I'll not fix the CI errors yet, I'll do if after we decided about the backward compatibility. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Loading a large dataset is about twice as fast and uses about a third of the memory.
User side changes
Noting dramatically. They use the same pipeline and python package as before, the way that we save the parquetbundle and later process it in UI is different, which is the reason of these improvements.
Numbers below are the tests on the old and new parquetbundle dataset of SwissProt (around 570k data points):
Nothing about the visualisation changed. A screenshot comparison of the fully loaded app found the images identical.
What changed in the
.parquetbundleformatCompatibility
Existing files still work. Every dataset already published loads exactly as before, so nothing needs regenerating and this can ship without coordination.
Open questions