November 5
Think of relations as functions from tuples to multiplicities
R(t)→multiplicityGiven f(R), R, and δR, compute f(R⊎δR) as f(R)⊎f′(R,δR)
Recursive implementation by cases.
Base case: δ(R)=δ+R−δ−R
For example...
A graph of deterministic (usually idempotent) operators.
Edges between operators representing data flows.
(Simple example: Relational Algebra tree)
Example: Connected Components
... but from the scheduler's perspective ...
Q0:=L
Q1:=min((Q0⋈E)⊎Q0)
Q2:=min((Q1⋈E)⊎Q1)
Q3:=min((Q2⋈E)⊎Q2)
...
(until Qi=Qi−1)
δQ0:=Q0=L
δQ1:=Q1−Q0≈min(δQ0⋈E)
δQ2:=Q2−Q1≈min(δQ1⋈E)
δQ3:=Q3−Q2≈min(δQ2⋈E)
...
(until δQi=∅)
δQi+1=min(Qi⋈E∪Qi)−Qi
≈min(Qi⋈E)−Qi
=min((Qi−1∪δQi)⋈E)−Qi
=min((Qi−2∪δQi−1∪δQi)⋈E)−Qi
=min((∑i′≤iδQi′)⋈E)−Qi
Note: δQi′⋈E⊆Qi∀i′<i
=min(δQi⋈E)−Qi
Now what if we want to modify E?
Q0,0:=L
Q1,0:=min((Q0⋈E)⊎Q0)
Q2,0:=min((Q1⋈E)⊎Q1)
Q3,0:=min((Q2⋈E)⊎Q2)
...
(until Qi,0=Qi−1,0)
Q0,1:=L
Q1,1:=min((Q0⋈(E⊎δE1))⊎Q0)
Q2,1:=min((Q1⋈(E⊎δE1))⊎Q1)
Q3,1:=min((Q2⋈(E⊎δE1))⊎Q2)
...
(until Qi,1=Qi−1,1)
Q0,2:=L
Q1,2:=min((Q0⋈(E⊎δE1⊎δE2))⊎Q0)
Q2,2:=min((Q1⋈(E⊎δE1⊎δE2))⊎Q1)
Q3,2:=min((Q2⋈(E⊎δE1⊎δE2))⊎Q2)
...
(until Qi,2=Qi−1,2)
Qi+1,j:=min((Qi,j⋈(∑j′≤jδEj′))⊎Qi,j)
observe that ... Qi+1,j−1:=min((Qi,j−1⋈(∑j′<jδEj′))⊎Qi,j−1)
so... Qi+1,j:=min((Qi,j−1⋈Ej)…
⊎Qi,j−1⊎Qi,j…
⊎(Qi,j−Qi,j−1)⋈(∑j′≤jδEj′))
Let δQi,j be all newly introduced values relative to all predecessors.
δQi,j=Qi,j−Qi−1,j−Qi,j−1Qi,j:=min((Qi−1,j−1⋈Ej)⊎Qi−1,j−1⊎Qi−1,j⊎(Qi−1,j−Qi−1,j−1)⋈(∑j′≤jδEj′))
δQi,j=min((Qi−1,j−1⋈Ej)⊎(Qi−1,j−Qi−1,j−1)⋈(∑j′≤jδEj′))
δQi,j=min((δQi,j−1⋈Ej)⊎(Qi−1,j−Qi−1,j−1)⋈(∑j′≤jδEj′))
δQi,j=min((δQi,j−1⋈Ej)⊎(δQi−1,j⋈∑j′≤jδEj′))
Much cheaper to evaluate!
(but requires keeping around all δQi,j