Query Evaluator
Execution of queries retains the same role responsibility, where the receiver is the clique(s) (cluster(s)) responsible for the hypergraph, and the sender is the keyholder. The sender being blind to decisions of the receiver, makes the query being processed indistinguishable from gossip requests for additional data blocks, which will happen by virtue of the parent BlossomSub protocol. Again, the algorithms are produced from the source literature:
Load Node (
Qpi(S, O)
):V ← ∅, E ← ∅
- Execute query on
hi
vi ← S ∧ wj ← O, V ← {vi, wj}, E ← (vi, wj), QAGi ← (V, E)
- Return
QAGi
Load Neighbor Node (
Qpi, Qpi+1(S, O)
):V ← ∅, E ← ∅
- If
(Qpi.S == Qpi+1.S) ∧ (Qpi.O == Qpi+1.S)
, then if∃Qpi+1.O ∈ V
thenV ← V ∪ Qpi.S ∧ Qpi.O ∈ pi+1.O, E ← (V ∈ Qpi, V ∈ Qpi+1)
elseV ← V ∪ Qpi+1.O, E ← (V ∈ Qpi, V ∈ Qpi+1)
. - Else, if
(Qpi.S == Qpi+1.O)∧(Qpi.O == Qpi+1.O)
then if∃Qpi+1.S ∈ V then V ← V ∪Qpi.S∧Qpi.O ∈ Qpi+1.S, E ← (V ∈ Qpi, V ∈ Qpi+1), else V ← V ∪ Qpi+1.S, E ← (V ∈ Qpi, V ∈ Qpi+1)
. In either case,QAG ← QAGi ∪ (V, E)
- Return
QAGi
Process Query:
- Given a set of predicates
QG, Qp and I(G)
. ∀Qpi|1 ≤ i ≤ n − 1
, ifi == 1
then executeLoadNode
withQpi(S, O)
, else executeLoadNeighborNode
withQpi, Qpi+1(S, O)
.- Return
QAGi