Skip to content

Add SlateDB - #1490

Open
alexey-milovidov wants to merge 8 commits into
mainfrom
slatedb
Open

Add SlateDB#1490
alexey-milovidov wants to merge 8 commits into
mainfrom
slatedb

Conversation

@alexey-milovidov

Copy link
Copy Markdown
Member

Adds SlateDB — an embedded LSM-tree key-value store (Rust) that keeps all state in an object store; here the local filesystem via object_store::LocalFileSystem.

SlateDB has no query language, so as usual for key-value stores the storage layout and query execution live in the client harness (slatedb/hits-slatedb/):

  • Storage: one KV pair per row — key = 8-byte big-endian row index, value = compact positional row encoding (fixed-width LE integers, varint-length strings). Zstd-compressed 64 KiB SST blocks; WAL off for the bulk load with a final flush.
  • Queries: the 43 queries run unmodified (same queries.sql as the datafusion entry) through embedded Apache DataFusion with a custom TableProvider whose partitions are parallel SlateDB range scans, with projection pushdown at the row-decode level. Comparing against the datafusion entry isolates what the KV storage layer costs.

Validation: all 43 queries diffed against DataFusion reading hits.parquet directly, at full 100M-row scale — identical results modulo float last-digit jitter and tie order under LIMIT (sort-key sequences verified equal).

Notes:

  • SlateDB is pinned to v0.15.0+17 commits: v0.15.0's embedded compactor intermittently panics during large bulk loads ("compaction source view not found in L0", fixed in fix(compactor): prevent terminal compaction resurrection slatedb/slatedb#2002, not yet released).
  • The harness uses jemalloc: glibc malloc fragmentation grew load RSS to 9.4 GB even at 4 cores; jemalloc keeps the same load at 5.8 GB peak, safe for the smaller machines.
  • Rough figures from a 96-core aarch64 box: load ~46 min, ~38 GB on disk, warm full-scan queries ~4 s; cold queries are disk-bound (the row store reads everything).

🤖 Generated with Claude Code

alexey-milovidov and others added 3 commits August 19, 2026 21:21
SlateDB is an embedded LSM-tree key-value store on object storage
(the local filesystem here). One key-value pair per row; the 43 SQL
queries run through embedded Apache DataFusion with a custom
TableProvider doing parallel SlateDB range scans.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- glibc malloc fragmentation grew load RSS unboundedly (9.4 GB at
  4 cores); jemalloc keeps it flat.
- v0.15.0's embedded compactor intermittently panics on large bulk
  loads ("compaction source view not found in L0"); pin the upstream
  fix (slatedb/slatedb#2002) until it lands in a release.
- Adapt to the post-0.15.0 write API (WriteHandle instead of
  WriteOptions::await_durable).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@alexey-milovidov
alexey-milovidov deployed to benchmark-approval August 19, 2026 23:59 — with GitHub Actions Active
@github-actions

Copy link
Copy Markdown
Contributor

Results for slatedb are ready for: c6a.4xlarge.
The result files are committed as fad4c37.

Logs:

The background GC never deletes objects younger than 5 minutes, so a
fast load reported ~72 GB in data-size while only ~24 GB were live
SSTs. Run an immediate GC pass after close (6 s on the full dataset).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@alexey-milovidov
alexey-milovidov deployed to benchmark-approval August 20, 2026 03:45 — with GitHub Actions Active
@github-actions

Copy link
Copy Markdown
Contributor

Results for slatedb are ready for: c6a.4xlarge.
The result files are committed as 3553733.

Logs:

The first end-of-load GC pass freed nothing: closing mid-compaction
pins the collector's low watermark at the oldest pending compaction,
and the 74 checkpoints left behind by compaction workers pin old
manifests and every SST they reference. Wait for the compactor to
drain, delete the checkpoints, then collect — data-size now matches
live SSTs (15.8 GB instead of 71 GB), and queries scan 3 merged runs
instead of dozens.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@alexey-milovidov
alexey-milovidov deployed to benchmark-approval August 20, 2026 07:13 — with GitHub Actions Active
@github-actions

Copy link
Copy Markdown
Contributor

Results for slatedb are ready for: c6a.4xlarge.
The result files are committed as 060b56a.

Logs:

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