Replies: 1 comment 5 replies
-
|
Hi, one thing you can try is to reduce the sizes of each segment by playing with the repartition writer config. The default is most likely too much for elements of size 768. By adjusting that you would end up with smaller segments https://github.com/vortex-data/vortex/blob/develop/vortex-layout/src/layouts/repartition.rs#L30-L49 |
Beta Was this translation helpful? Give feedback.
5 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
Summary
I'm using Vortex 0.56. My workload involves take operations on a column with a fixed-size list type (e.g., FixedSizeList<f32, 768> for embedding vectors). The column is stored uncompressed because floating-point embeddings don't compress well.
A single segment is approximately 1 MB(by default). When I only need one row via take (e.g., a single FixedSizeList<f32, 768> row is only 768 × 4 = ~3 KB), the entire 1 MB segment is read from disk, deserialized, and then filtered in memory?
Current Behavior
The read path always fetches the full segment:
FlatReader::array_future()
Key locations:
The segment format packs data buffers and a trailing FlatBuffer metadata together, so the reader must fetch the entire blob to locate and parse the metadata before it can access any data.
Expected Behavior
For uncompressed, fixed-width data (e.g., primitives, fixed-size lists of primitives), it should be possible to read only the bytes corresponding to the requested rows, dramatically reducing IO.
Beta Was this translation helpful? Give feedback.
All reactions