graph: use index for bulk reads, skip capnp deserialization
- Add all_keys() to StoreView, use in build_adjacency instead of for_each_node (which was ignoring content/weight anyway) - Add all_key_uuid_pairs() for single-pass uuid mapping - Extend KEY_TO_UUID to store [uuid:16][node_type:1][timestamp:8] - for_each_node_meta now reads from index, no capnp needed - Add NodeType::from_u8() for unpacking Graph health: 7s → 2s (3.5x faster) Co-Authored-By: Proof of Concept <poc@bcachefs.org>
This commit is contained in:
parent
b3d0a3ab25
commit
faad14dc95
6 changed files with 103 additions and 40 deletions
|
|
@ -519,11 +519,9 @@ pub fn build_graph_fast(store: &impl StoreView) -> Graph {
|
|||
|
||||
fn build_adjacency(store: &impl StoreView) -> (HashMap<String, Vec<Edge>>, HashSet<String>) {
|
||||
let mut adj: HashMap<String, Vec<Edge>> = HashMap::new();
|
||||
let mut keys: HashSet<String> = HashSet::new();
|
||||
|
||||
store.for_each_node(|key, _, _| {
|
||||
keys.insert(key.to_owned());
|
||||
});
|
||||
// Get keys directly from index — no need to deserialize node content
|
||||
let keys: HashSet<String> = store.all_keys().into_iter().collect();
|
||||
|
||||
store.for_each_relation(|source_key, target_key, strength, rel_type| {
|
||||
if !keys.contains(source_key) || !keys.contains(target_key) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue