4.0 KiB
m7p3: Performance at Scale
Delivers
Benchmarks and optimization at 1M items, 100K users, 10K creators. USearch parameter tuning for recall/latency tradeoff. Tantivy segment management for steady-state read/write performance. Signal state memory footprint analysis with LRU trimming if exceeding 10 GB. Signal rollup evaluation for 30d+ windows if bucketed counters exceed the 50ms budget at scale. Flamegraph profiling of RETRIEVE and SEARCH hot paths with optimization of any hotspot exceeding 10% of total time. CoEngagementIndex LRU correctness at 2x capacity and social graph filter verification at 1M items.
Dependencies
- m7p1 complete (provides the baseline entity/signal/relationship infrastructure at current scale)
Research References
docs/research/ann_for_tidaldb.md-- USearch parameter guidance (M, ef_construction, recall/latency tradeoff at 1536D)docs/research/tantivy.md-- LogMergePolicy, segment management, concurrent read/write latencydocs/research/tidaldb_signal_ledger.md-- Three-tier hybrid, per-entity memory model, rollup architecture
Acceptance Criteria (Phase Level)
- Criterion benchmark suite: RETRIEVE p99 < 50ms, SEARCH p99 < 100ms, signal write p99 < 100us amortized at 1M items
- USearch M={8,16,32} x ef_construction={100,200,400} benchmarked; optimal config documented and applied; ANN recall@10 > 0.95
- Tantivy LogMergePolicy tuned; segment count < 20 at steady state; background merge does not block reads
- Signal state memory < 10 GB for 1M items x 10 signal types x 5 windows; LRU trimming if exceeded
- Signal rollup evaluation: benchmark 30d windowed count; implement if p99 > 50ms; document result
- Flamegraph profiling; top-3 hotspots documented; any > 10% of total time optimized
- CoEngagementIndex eviction at 2x capacity: memory stays bounded; LRU ordering correct
- Cross-session preference at scale: 100K users x 10 sessions; merge < 1ms per merge
Task Execution Order
task-01 (Scale Benchmark Suite)
|
+---> task-02 (USearch Parameter Tuning)
+---> task-03 (Tantivy Merge Policy)
+---> task-04 (Signal State Memory Analysis)
+---> task-05 (Signal Rollup Evaluation)
+---> task-06 (Flamegraph Profiling)
+---> task-07 (CoEngagement LRU + Social Scale)
task-01 establishes baselines that all other tasks depend on. Tasks 02-07 are independent and can execute in parallel after task-01 completes.
Module Location
- New bench file:
tidal/benches/scale.rs-- 1M-item benchmark suite - Existing bench files extended:
tidal/benches/vector.rs,tidal/benches/search.rs,tidal/benches/social.rs - Configuration changes:
tidal/src/storage/vector/(USearch params),tidal/src/text/(Tantivy merge policy) - Potential new module:
tidal/src/signals/trimmer.rs(LRU trimming, if memory exceeds budget)
Notes
- The 1M-item benchmark setup will take minutes to construct. Use
criterion::BenchmarkGroup::sample_size(10)andmeasurement_time(Duration::from_secs(60))for these large-scale benches to keep CI wall time manageable. - USearch parameter tuning requires building separate indexes per (M, ef_construction) pair. Build these once in setup, not per iteration.
- Tantivy segment count observation requires a write-then-search steady-state loop, not a single query benchmark.
- Signal memory analysis is a measurement task, not a benchmark. Use
std::mem::size_ofand DashMap entry counting rather than Criterion. - Flamegraph profiling uses
cargo flamegraph(requiresflamegraphcrate orcargo install flamegraph). Not a Criterion bench -- produces SVG artifacts.
Done When
All 8 phase-level acceptance criteria pass. The scale bench target is registered in Cargo.toml. Flamegraph SVGs are committed to docs/profiling/. USearch optimal config is applied to VectorIndexConfig::default(). Tantivy merge policy is configured in TextIndex construction. Signal trimming is implemented if the memory threshold is exceeded, or a document explains why it is not needed.