diff options
| author | Marcos Magueta <maguetamarcos@gmail.com> | 2025-12-01 18:34:31 -0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-12-01 18:34:31 -0300 |
| commit | 8c8b32d59acc78c7c3e1e8ecae8492a1b728b482 (patch) | |
| tree | b218e550b2b09e4920af6e12db531bfd65f65929 /docs/reactive-queries.puml | |
| parent | e03b7c75be589d12ddc97d074abd2e3a5c6b7cdf (diff) | |
| download | Sakura-8c8b32d59acc78c7c3e1e8ecae8492a1b728b482.tar.gz Sakura-8c8b32d59acc78c7c3e1e8ecae8492a1b728b482.zip | |
Diagrams (#18)
Diffstat (limited to 'docs/reactive-queries.puml')
| -rw-r--r-- | docs/reactive-queries.puml | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/docs/reactive-queries.puml b/docs/reactive-queries.puml new file mode 100644 index 0000000..bcba5d5 --- /dev/null +++ b/docs/reactive-queries.puml @@ -0,0 +1,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 |
