[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] conflict-free replicated data-types
For those who are interested, I've quickly hacked an implementation of http://hal.inria.fr/inria-00609399/ This is available in https://github.com/samoht/ocaml-crdt The idea is to create new datatypes on top of Lamport's vector clocks that you can easily use in distributed settings because they are conflict-free (reminder: a vector clock is an array of integer, with size = number of actor, and where actor $i$ can only increment the cell number $i$: they are used to get some distributed timestamp and to be able to order events in a distributed run). For instance, you can have a distributed counter, that each actor can increment concurrently, and whose global state is the sum of local increments. These structures are sent between actors and can be synchronized easily. What I've implemented: - a distributed additive counter: it is just a vector clock, and it global state is the sum of its components - a distributed counter: it is 2 distributed additive counters, one for the number of incrs, one for the number of decrs, and the global state is the difference of global state of these two counters - a distributed set: you have one distributive counter per elements, and you can check whether an element is in a set if the global value of the counter is greater than 0 - a distributed map: you have one distributive set to test membership, and one normal map to carry the contents <- this is a bit broken currently, I might change that later Currenlty, the only missing bits is a nice way to exchange distributed datastructes between actors. I'm using Obj.magic in https://github.com/samoht/ocaml-crdt/blob/master/test/main.ml, I would be quite happy to find an other nicer solution (but I have none in mind currently). Best, Thomas
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |