Skip to content
You are viewing the corvid 0.3.0 release snapshot — frozen at the 0.3.0 engine release.Current documentation

The numbers

All numbers: Apple M1 Max, criterion, deterministic corpora — means with 95% CI unless noted. Single-machine: compare relatively. Method and caveats on the previous page.

BenchMean95% CI
value_encode409.44 ns[408.99, 411.51]
value_decode872.73 ns[872.36, 876.42]
hnsw_build_2k_64d125.92 ms[125.73, 126.11]
hnsw_search_2k_64d19.04 µs[18.97, 19.10]
hnsw_build_pq_2k_64d365.69 ms[363.03, 369.07]
hnsw_search_pq_2k_64d37.79 µs[36.85, 39.14]
pq_train_2k_64d (parallel)64.93 mssuite context
pq_train_10k_128d (parallel)381.68 mssuite context
bm25_exact_2k8.033 ms[7.968, 8.143]
bm25_indexed_2k490.10 µs[483.54, 498.24]
dot_768d81.07 ns[80.42, 81.68]
l2_768d84.26 ns[82.48, 84.98]
cosine_768d224.29 ns[220.86, 231.60]
edge_link_10k392.98 mssuite context
edge_delete_sweep_10049.70 mssuite context
delete_heavy/delete_half_2p5k230.39 mssuite context
delete_heavy/insert_unique_scalar_5k185.72 mssuite context
compound_prefix_scan/eq_leading_only_5k251.09 µssuite context
selective_window_verify/eq_50_of_5k236.20 µssuite context
selective_window_verify/eq_500_of_5k619.56 µssuite context
order_by_indexed_5k/asc_limit20312.61 µssuite context
order_by_indexed_5k/desc_limit201.009 mssuite context
create_text_index_ondisk_5k230.22 mssuite context
create_vector_index_ondisk_2k_8d402.82 mssuite context

Named deltas vs the prior baseline: bm25_exact_2k +5.0% (the CJK-aware tokenize pass on a latin corpus — documented residual, inside the guard); the delete/edge family sits above its recorded isolated AFTERs (the suite-vs-isolated context gap, unchanged code, isolated re-probes confirmed); value_decode +3.0% and the distance kernels +1–5% are ambient machine drift. No regression attributable to code; the guard holds.

The optimization program’s headline deltas

Section titled “The optimization program’s headline deltas”

Each row’s BEFORE is the recorded pre-change baseline (provenance in the engine’s BENCHES.md; conventions on the overview).

Verify-candidates batching (dense indexed windows verify with one ordered walk instead of per-key point-gets):

BenchBEFOREAFTERΔ
eq_500_of_5k (10% density)745.14 µs576.25 µs−22.7%
eq_50_of_5k (1% density)221.21 µs229.82 µs+3.9% (point-gets kept; within guard)

Sort indexes (filterless order_by over a complete scalar index):

BenchBEFOREAFTERΔ
asc_limit202.642 ms289.5 µs−89.0%
desc_limit202.795 ms1.024 ms−63.4%

Compound prefix-only windows (the all_docs_indexed flag):

BenchBEFOREAFTERΔ
eq_leading_only_5k1.540 ms232.41 µs−84.9% (6.6×)

Edge adjacency (O(degree) delete cascades via endpoint-first derived namespaces):

BenchBEFOREAFTERΔ
edge_delete_sweep_100241.0 ms40.5 ms~5.9× — O(degree) vs O(E)
delete_half_2p5k566.8 ms194.5 ms~2.9×
edge_link_10k273.5 ms359.4 ms+40% — RATIFIED

The ratified trade: two extra rows per link buy O(degree) cascades — deletes were the workload-blocking hazard. The alternative shapes (consolidated per-endpoint values, pure-lazy adjacency) were measured and rejected with numbers.

Parallel PQ training (identical codebooks, bit-for-bit):

BenchSequentialParallelΔ
pq_train_2k_64d177.2 ms67.4 ms2.6×
pq_train_10k_128d1465.0 ms356.2 ms4.1×

Graph reads, endpoint-direct (parity verdict — kept for the shared layout, not speed):

BenchBEFOREAFTERΔ
hub_out_knows (313 rows)37.08 µs37.12 µs+0.1%
hub_in_knows29.58 µs29.96 µs+1.3%
traverse_hub_2hops570.5 µs581.4 µs+1.9%

Next: scaling.