fst_incremental 1.0.2

A thread-safe, updatable finite state set: dynamic insertions, deletions and queries over an immutable fst::Set fronted by a compact mutation buffer with amortized rebuilds.
Documentation
mod common;

use common::{keys, persisted_bytes, rng, BATCH, KEY_LENGTH};
use criterion::{criterion_group, criterion_main, BenchmarkId, Criterion, Throughput};
use std::hint::black_box;

fn bench_insert_single(c: &mut Criterion) {
  let mut group = c.benchmark_group("InsertSingle");
  let mut r = rng(0);

  for size in [1_000usize, 10_000, 100_000] {
    let base = persisted_bytes(&keys(&mut r, size, KEY_LENGTH));
    let fresh = keys(&mut r, BATCH, KEY_LENGTH);

    group.throughput(Throughput::Elements(BATCH as u64));
    group.bench_with_input(BenchmarkId::from_parameter(size), &size, |b, _| {
      b.iter_batched(
        || (common::from_bytes(&base), fresh.clone()),
        |(set, batch)| {
          for key in batch {
            black_box(set.insert(key).unwrap());
          }
        },
        criterion::BatchSize::SmallInput,
      );
    });
  }
  group.finish();
}

criterion_group!(benches, bench_insert_single);
criterion_main!(benches);