Skip to content

feat(fsst): module skeleton, Symbol, Decompressor#290

Merged
dfa1 merged 1 commit into
mainfrom
feat/fsst-module-skeleton
Jul 19, 2026
Merged

feat(fsst): module skeleton, Symbol, Decompressor#290
dfa1 merged 1 commit into
mainfrom
feat/fsst-module-skeleton

Conversation

@dfa1

@dfa1 dfa1 commented Jul 19, 2026

Copy link
Copy Markdown
Owner

Summary

PR 1 of an 8-PR sequence implementing #287 ("improve FSST implementation"). Full plan: paper-faithful rewrite of FSST (branch-free matching, adaptive-sample training with reference refinements, unconditional-8-byte-store decode) isolated into a standalone vortex-fsst module — no zero-dep Java FSST library exists to reuse, and the Rust reference itself splits a pure algorithm crate (spiraldb/fsst) from the thin wire adapter (vortex-fsst), which is exactly what this mirrors.

This PR is purely additive:

  • New fsst module (vortex-fsst), modeled on fbs-gen's pom but publishable (no maven.deploy.skip) since writer/reader depend on it starting in PR 5.
  • Symbol record — LSB-first byte packing, same convention as the writer's existing SymbolCandidate.
  • Decompressor — byte[]-based, implements the paper's Algorithm 1. MemorySegment-native hot path is PR 4's scope.

No existing code touched — writer/reader unaffected.

Test plan

  • ./mvnw verify -pl fsst -am — 13 tests, checkstyle 0 violations
  • ./mvnw verify -DskipTests at root — full 16-module reactor SUCCESS
  • ./mvnw javadoc:javadoc -pl fsst — zero output (build-enforced gate)

🤖 Generated with Claude Code

Introduce a standalone `vortex-fsst` module as the first step of #287
("improve FSST implementation"). The current inline FSST encoder/decoder is
a simplified first pass; comparing against vortex-jni surfaced real gaps in
matching, training, and decode. Following the paper (Boncz/Neumann/Leis,
VLDB 2020) and the Rust reference's split of a pure algorithm crate
(spiraldb/fsst) from the thin wire adapter, and since research found no
zero-dependency Java FSST library to reuse, the algorithm is isolated into
its own module so it can be iterated on and benchmarked without the Vortex
wire-format shell in the way.

This PR is purely additive — no existing code is touched. It ports the
lowest-risk piece first: the `Symbol` record (LSB-first byte packing, the
same convention as the writer's existing SymbolCandidate) and a byte[]-based
`Decompressor` implementing the paper's Algorithm 1 (escape-or-symbol decode
loop). The MemorySegment-native hot path, branch-free matching, training, and
the adapter rewire that makes writer/reader depend on this module all land in
later PRs of the sequence.

Unlike the build-tooling generators, this module ships to Maven Central
(writer/reader will depend on it at runtime), so its POM omits
`maven.deploy.skip`.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@dfa1
dfa1 merged commit 2b8db4f into main Jul 19, 2026
6 checks passed
@dfa1 dfa1 mentioned this pull request Jul 20, 2026
@dfa1
dfa1 deleted the feat/fsst-module-skeleton branch July 20, 2026 20:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant