#lsm-tree #tombstone #versioned #order #data #bincode #serde

seq-marked

Sequence-numbered values with tombstone support for LSM trees and versioned data

7 releases

Uses new Rust 2024

0.3.5 Sep 22, 2025
0.3.4 Sep 21, 2025
0.3.3 Aug 24, 2025
0.3.1 Jul 15, 2025
0.2.0 Jul 14, 2025

#554 in Encoding

Download history 278/week @ 2025-10-05 553/week @ 2025-10-12 484/week @ 2025-10-19 383/week @ 2025-10-26 582/week @ 2025-11-02 603/week @ 2025-11-09 516/week @ 2025-11-16 718/week @ 2025-11-23 781/week @ 2025-11-30 544/week @ 2025-12-07 466/week @ 2025-12-14 56/week @ 2025-12-21 19/week @ 2025-12-28 30/week @ 2026-01-04 26/week @ 2026-01-11 16/week @ 2026-01-18

92 downloads per month
Used in rotbl

Apache-2.0

72KB
2K SLoC

seq-marked

Sequence-numbered values with tombstone support for LSM trees and versioned data.

Core Types

  • Marked<D>: Data that can be marked as tombstone
  • SeqMarked<D>: Sequence-numbered marked value

Usage

use seq_marked::{Marked, SeqMarked};

// Basic sequence-numbered values
let v1 = SeqMarked::new_normal(1, "data");
let v2 = SeqMarked::new_normal(2, "data");
let v2_ts = SeqMarked::<&str>::new_tombstone(2);

assert!(v1 < v2); // ordered by sequence
assert!(v2 < v2_ts); // tombstone > normal

// Working with marked values
let data = Marked::Normal("hello");
let tombstone = Marked::<&str>::TombStone;
assert!(tombstone > data);

// Accessing data
assert_eq!(v1.data_ref(), Some(&"data"));
assert_eq!(v2_ts.data_ref(), None);
assert!(v2_ts.is_tombstone());

// Transform data while preserving sequence
let lengths = v1.map(|s| s.len());
assert_eq!(lengths.data_ref(), Some(&4));

API Overview

Marked<D>

  • Normal(D) - contains data
  • TombStone - deletion marker
  • Tombstones are always ordered after normal values

SeqMarked<D>

  • new_normal(seq, data) - create normal value
  • new_tombstone(seq) - create tombstone
  • seq() - get sequence number
  • data_ref() / into_data() - access data
  • is_normal() / is_tombstone() - check type
  • map(fn) - transform data while preserving sequence
  • order_key() - get ordering key without data

Features

  • Sequence-based ordering with tombstone support
  • Optional serde/bincode serialization
  • Comprehensive ordering semantics for LSM trees

License

Apache License 2.0 - see LICENSE file for details.

Contributing

Contributions welcome! Please ensure all tests pass and code is properly formatted before submitting a PR.

Dependencies

~165KB