- Almeida, Paulo S'ergio and Shoker, Ali and Baquero, Carlos
I think most of these data structures are available in Riak via riakdt
Instead of shipping the whole state, ship only deltas (δ-state) generated by δ-mutators.
Definition 1 (Delta-mutator). A delta-mutator is a function, corresponding to an update operation, which takes a state in a join-semilattice as parameter and returns a delta-mutation , also in .
Definition 2 (Delta-group). A delta-group is inductively defined as either a delta-mutation or a join of several delta-groups.
Definition 3 (δ-CRDT). A δ-CRDT consists of a triple , where is a join-semilattice, is a set of delta-mutators, and a set of query functions, where the state transition at each replica is given by either joining the current state with a delta-mutation: , or joining the current state with some received delta-group : .
it will be useful to find a non-trivial decomposition such that delta-states returned by delta-mutators in are smaller than the resulting state:
Definition 4 (Delta-interval). Given a replica progressing along the states , by joining delta (either local delta-mutation or received delta-group) into to obtain , a delta-interval is a delta-group resulting from joining deltas :
Definition 5 (Delta-interval-based anti-entropy algorithm). A given anti-entropy algorithm for δ-CRDTs is delta-interval-based, if all deltas sent to other replicas are delta-intervals.
Definition 6 (Causal delta-merging condition). A delta-interval based anti-entropy algorithm is said to satisfy the causal delta-merging condition if the algorithm only joins from replica into state of replica that satisfy:
Portfolios contains the following data types:
LWW-Set (Add-Wins or Remove-Wins)
state = a lexicographic pair for each replica
DotSet, DotFun, DotMap
Add-Wins Set (this can be seen as a map from elements to enable-wins flags, but with a single causal context)
Nesting CRDTs in a map