- 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
- Enable-Wins Flag
- Multi-Value Register
- Add-Wins Set (this can be seen as a map from elements to enable-wins flags, but with a single causal context)
- Remove-Wins Set
- Nesting CRDTs in a map