Folks,

As you know we are developing multi-version concurrency control for Ignite
caches, which is essentially new mode for transactional cache with snapshot
semantics. One of the most important applications of this mode would be
fully transactional SQL The question is how to implement continuous query
semantics with MVCC. Several interesting things here.

1) *Event ordering*. Currently we guarantee order of updates for specific
key. But for fair transactional mode user may want to get transactional
ordering instead of key ordering. If there are several dependent
transactions, I may want to receive their updates in order. E.g.:
TX1: transfer(A -> B)
TX2: transfer(B -> C)
TX3: transfer(C -> D)

If user receives update on key D (TX3), should we guarantee that he already
received updates for all keys in TX1 and TX2? My opinion is that we'd
better to leave things as is and guarantee only per-key ordering. Only one
reason - implementation complexity.

2) *Initial query*. We implemented it so that user can get some initial
data snapshot and then start receiving events. Without MVCC we have no
guarantees of visibility. E.g. if key is updated from V1 to V2, it is
possible to see V2 in initial query and in event. With MVCC it is now
technically possible to query data on certain snapshot and then receive
only events happened after this snapshot. So that we never see V2 twice. Do
you think we this feature will be interesting for our users?

Please share your thoughts.

Vladimir.

Reply via email to