I'm quite new to (delta) crdt. According to my understanding delta crdt keeps a "global" (eventual consistent) state and a delta state. It occasionally sends the delta part (and sometimes the full state) to other replicas. Some other crdt algorithms can garbage collect tombstones when all replicas have seen the changes. My question is that if it is possible (and if it make sense) to merge the two things?
- keep delta that is the union of the local deltas and the received deltas from other replicas
- send the merged deltas to some of the replicas
- on receiving delta, it is merge to the global and delta states as well. If operations has been seen by all the replicas, the tombstones get purged.
Some articles:
My theory is that, replicas will send smaller deltas and not the whole state thus band-with requirement is limited, and the size of the tombstones (and thus memory requirements) will be limited as well. Is there some good tutorial on the delta-crdt and tombstone garbage-collection ? I've read some of the original articles and they are not that easy to understand.
Also I could not find too much detail about how to send delta to the replicas. (Sending all delta to all replica seems overkill and not too optimal). My basic idea would be to keep a (crdt) graph of the topology of the connection between the replicas. During delta propagation this graph is used to construct some "optimal" topology where each replica sends to (ex at most 2) other replicas. If graph topology shows that some replica is inactive the other replicas try to find a "new route" to the inactive replica. It could mark a replica disconnected. When a replica appears it can get a full state from some other replica and make it part of this "organic" eventual consistent topology graph.
So I'm quite new and any introductory info is welcome.
Thanks, gzp