blob: bcba5d53b0a2749edfc11011744baff93e7768ff (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
@startuml reactive-queries
!theme plain
title Reactive Queries (Live Subscriptions)
participant "Client" as C
participant "Subscription Manager" as SM
participant "Domino" as D
database "employee relation" as E
C -> SM: subscribe(query: "age > 30")
activate SM
SM -> D: register_subscription(employee, predicate)
activate D
D -> E: initial query
E --> D: [{name: "Alice", age: 35}]
D --> SM: initial results
SM --> C: [{name: "Alice", age: 35}]
deactivate D
deactivate SM
... time passes ...
C -> D: insert(employee, {name: "Bob", age: 32})
activate D
D -> D: check affected subscriptions
D -> D: evaluate predicate on new tuple\n(32 > 30? yes)
D -> SM: notify(subscription_id, {inserted: "Bob"})
activate SM
SM -> C: delta: {inserted: {name: "Bob", age: 32}}
deactivate SM
deactivate D
C -> D: insert(employee, {name: "Charlie", age: 25})
activate D
D -> D: evaluate predicate\n(25 > 30? no)
D -> D: no notification needed
deactivate D
note right of SM
Subscription tracks:
- Relation(s) to watch
- Filter predicate
- Client callback
On mutation:
1. Check which subscriptions affected
2. Evaluate predicate on changed tuples
3. Send delta (not full re-query)
end note
@enduml
|