query: introduce space optimized BranchesRepos (#160)
This commit introduces a space optimized alternative to
query.RepoBranches. Its name is query.BranchesRepos and it is a slice of
(Branch, Repo IDs bitmap). This is part of the effort to reduce memory spikes
and OOMs in the sourcegraph frontend.
The benchmark diff is impressive at 5.5m repos:
name old time/op new time/op delta
BranchesRepos_Encode-32 1.03s ± 7% 0.00s ± 3% -99.99% (p=0.008 n=5+5)
BranchesRepos_Decode-32 915ms ± 4% 0ms ± 1% -99.98% (p=0.008 n=5+5)
name old bytes new bytes delta
BranchesRepos_Encode-32 189MB ± 0% 0MB ± 0% -99.77% (p=0.008 n=5+5)
name old alloc/op new alloc/op delta
BranchesRepos_Encode-32 189MB ± 0% 0MB ± 0% -99.76% (p=0.000 n=4+5)
BranchesRepos_Decode-32 766MB ± 0% 1MB ± 0% -99.88% (p=0.008 n=5+5)
name old allocs/op new allocs/op delta
BranchesRepos_Encode-32 1.60 ±88% 89.00 ± 0% +5462.50% (p=0.008 n=5+5)
BranchesRepos_Decode-32 134k ± 0% 0k ± 0% -99.67% (p=0.008 n=5+5)
Co-authored-by: Keegan Carruthers-Smith <keegan.csmith@gmail.com>