Experiment 5: Performance at Scale

Goal: show when indexed replay starts to beat a naive full replay on larger histories. We generate a long demo‑style narrative, then compare VSABrains against a naive baseline that always replays from step 0 and scans the full list for localization.

Default run size is 10,000 facts for fast local testing. The example numbers below come from a 100,000‑fact run (see the date at the bottom). The script supports up to 1,000,000 facts.

Area Result Interpretation Status
Ingestion 14.34 s for 100,000 facts (~6,971 facts/s) Feasible CPU‑first ingestion at this scale Good
Replay Queries VSABrains 0.024 s vs naive 0.050 s (24 queries) ~2.07× faster with checkpoints Win
Localization VSABrains 0.0011 s vs naive 0.020 s (24 runs) ~18× faster indexed localization Big Win
Correctness 0 mismatches on the replay-based queries Speedup without drift on these tests Pass

Ingestion Throughput

Ingestion throughput at one hundred thousand facts

Ingest cost grows roughly linearly with facts and also scales with the number of columns (more writes per step).

Replay Query Time

Replay query time comparison at one hundred thousand facts

The naive baseline does a full replay from step 0 for every query. VSABrains replays only from the nearest checkpoint, which reduces the effective replay distance.

Localization Time

Localization time comparison at one hundred thousand facts

Localization is where indexing matters most. The naive list must compare the query window against almost the entire history, while VSABrains narrows the search to candidate locations.

Apples-to-apples update: localization timing now uses the same run count as the replay section (24).

Configuration and Repro

Parameter Value
Facts100,000 (example run)
Queries24
Localization Runs24
Columns1
Checkpoint Interval5,000
Map96 × 96, k=4
DisplacementcontextLength=2, maxStep=3

Run command: node eval/exp5-performance/run.mjs --facts 100000 --queries 24 --localizationRuns 24 --columns 1 --checkpointInterval 5000 --progressEvery 20000

Default (fast) run: node eval/exp5-performance/run.mjs

Example run recorded: 2026-01-27. Source: eval/exp5-performance/run.mjs.