Liking cljdoc? Tell your friends :D

Persistent Suffix Native Graph Benchmarks

Date: 2026-06-13

This ledger records the fixed-sample benchmark run for the native persistent suffix graph families:

  • PersistentSuffixAutomaton / PersistentSuffixAutomatonChar
  • PersistentSuffixTree / PersistentSuffixTreeChar
  • PersistentScdawg / PersistentScdawgChar

The run compares native graph storage against encoded suffix ARTrie controls. It was collected after the host load dropped; interval vmstat rows captured around the run showed 87-93% idle CPU and 0% I/O wait.

Command

PERSISTENT_SUFFIX_FIXED_SAMPLES=1 cargo bench --features persistent-artrie --bench persistent_suffix_native_benchmarks

Fixed-sample mode emits 51 measured samples after 3 warmups for each metric x arm pair. Scratch data uses target/bench-scratch, not /tmp.

pgmcp Records

All 36 raw metric x arm sample vectors are stored in pgmcp data table libdictenstein.persistent_suffix_native_benchmark_sample_sets under run id persistent_suffix_native_fixed_2026_06_13_0638z_63c0fa4d.

The pre-registered parallel read/write hypotheses were decided by pgmcp using Welch's t-test with p < 0.05 and minimum Cohen's d = 0.5.

MetricExperimentHypothesisVerdict
suffix_byte_parallel_read_write_ns_per_read5656accepted
suffix_char_parallel_read_write_ns_per_read5757accepted
suffix_tree_byte_parallel_read_write_ns_per_read5858accepted
suffix_tree_char_parallel_read_write_ns_per_read5959accepted
scdawg_byte_parallel_read_write_ns_per_read6060accepted
scdawg_char_parallel_read_write_ns_per_read6161accepted

Parallel Read/Write Results

Four reader threads performed 2,000 reads each while one writer inserted into the same persistent index.

TypeControl meanNative meanReductionWelch pCohen's d
Suffix automaton byte11,751.65 ns/read1,498.33 ns/read87.25%3.21e-60-7.37
Suffix automaton char20,043.34 ns/read2,288.87 ns/read88.58%2.01e-66-10.30
Suffix tree byte22,142.33 ns/read1,258.74 ns/read94.32%4.16e-48-11.58
Suffix tree char35,903.02 ns/read1,223.74 ns/read96.59%9.52e-65-25.04
SCDAWG byte20,307.08 ns/read213.95 ns/read98.95%3.76e-47-11.10
SCDAWG char35,220.62 ns/read251.65 ns/read99.29%4.45e-63-23.19

Lookup And Location Results

These are fixed-sample means from the same run. They were recorded as raw sample vectors in pgmcp but were not the pre-registered Welch hypotheses for this batch.

TypeControl meanNative meanReduction
Suffix automaton byte match positions36,693.71 ns/query4,624.77 ns/query87.40%
Suffix automaton char match positions66,199.02 ns/query4,696.49 ns/query92.91%
Suffix tree byte locations64,079.53 ns/query9,418.33 ns/query85.30%
Suffix tree char locations125,720.63 ns/query10,184.02 ns/query91.90%
SCDAWG byte locations63,184.32 ns/query93.04 ns/query99.85%
SCDAWG char locations125,604.41 ns/query150.20 ns/query99.88%

Checkpoint Disk Size Results

Checkpoint disk-byte metrics were also stored as raw pgmcp vectors.

TypeControl meanNative meanReduction
Suffix automaton byte checkpoint745,956.8 bytes5,381.0 bytes99.28%
Suffix automaton char checkpoint1,366,267.0 bytes8,928.2 bytes99.35%
Suffix tree byte checkpoint745,949.2 bytes5,381.0 bytes99.28%
Suffix tree char checkpoint1,368,007.2 bytes9,027.9 bytes99.34%
SCDAWG byte checkpoint745,956.5 bytes5,117.0 bytes99.31%
SCDAWG char checkpoint1,369,283.6 bytes8,797.5 bytes99.36%

Notes

  • Native graph treatment samples include occasional high-latency outliers in the suffix automaton parallel workloads, but every registered comparison still had a large effect and passed the pre-registered Welch criterion.
  • pgmcp robustness checks reported Cliff's delta -1.0 for all six registered parallel hypotheses. Several treatment distributions departed from normality; the robustness check's Mann-Whitney result agreed with the Welch decision.

Can you improve this documentation?Edit on GitHub

cljdoc builds & hosts documentation for Clojure/Script libraries

Keyboard shortcuts
Ctrl+kJump to recent docs
Move to previous article
Move to next article
Ctrl+/Jump to the search field
× close