Writer: compact zstd writes one frame per array; Rust writes 8192 values per frame

Aperta Adatta ai principianti
#636 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
2/5
Tempo stimato
1-3 ore
Idoneità per principianti
66/100
Tipo di issue
Funzionalità
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
java
Ambito
data

Direzione di ricerca

Inizia dal preset compact che chiama ZstdEncodingEncoder.forText() lato Java, dove valuesPerFrame è 0, e confrontalo con il riferimento Rust in vortex-btrblocks/src/schemes/binary/zstd.rs:59, che usa 8192. Verifica il percorso di lettura multi-frame per confermare che i frame vengano suddivisi in base a n_values, e verifica come la regola di chiusura dei frame da 1 GiB di #633 interagisce con la nuova dimensione del frame. Il lavoro è completato quando il preset compact scrive 8192 valori per frame e i test di lettura e round-trip esistenti continuano a passare.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

bug

Rust's btrblocks binary zstd scheme compresses with 8192 values per frame (vortex-btrblocks/src/schemes/binary/zstd.rs:59, from_var_bin_view_without_dict(&compacted, 3, 8192, ...)). The Java compact preset uses ZstdEncodingEncoder.forText(), i.e. valuesPerFrame = 0: one frame per array.

Both read back (Rust and Java read multiple frames by n_values), so this is an encoding-parity gap, not a correctness bug. It also means a slice scan of a Java-written compact column decompresses the whole array instead of the frames overlapping its row range.

Since #633, a Java varbin frame also closes before 1 GiB of payload (a Java-only rule that keeps every frame under the reader's 2 GiB per-frame cap); adopting Rust's 8192 values per frame would make that cap rarely matter.

Found while reviewing #633.

Lingua principale
Java
Stelle
3
Fork
2
Merge medio
14h 59m
PR unite (30g)
137

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di dfa1/vortex-java

Tutte le issue di dfa1/vortex-java

Issue simili

Altre issue su Java

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.