using g-counter for sequence number synchronization

Hristo Asenov hristo.s.asenov at gmail.com
Mon Jan 26 11:06:47 EST 2015


Thanks Mark and Chris, I see now that I need to use a strongly consistent framework of some kind for this operation. 

- Hristo

> On Jan 26, 2015, at 3:56 AM, Christopher Meiklejohn <cmeiklejohn at basho.com> wrote:
> 
>> 
>> On Jan 23, 2015, at 5:32 PM, Hristo Asenov <hristo.s.asenov at gmail.com <mailto:hristo.s.asenov at gmail.com>> wrote:
>> 
>> Hello everyone,
>> 
>> I have noticed that in latest documentation on Riak data types (http://docs.basho.com/riak/latest/theory/concepts/crdts/#Counters <http://docs.basho.com/riak/latest/theory/concepts/crdts/#Counters>), for Counters it is not recommended to use them for ordered IDs (UUIDs). Can I implement g-counters (as described in the CRDT paper) using Riak’s Set datatype? I am wondering whether that will work out well for my use case.
>> 
>> What I would like to do is to have synchronization of sequence numbers between multiple src processes that send their inputs to a single centralized process. I want all the sequence numbers to be unique so that the centralized process can create an ordering of the input messages based on the sequence numbers. Thus I would have an integer entry for each src process in the set, and the sum of all the integers would be my unique id. After the src process writes a value to the DHT for its corresponding entry, would it then have to read the value from the DHT in order to make sure it got committed without conflicts?
> 
> Hi Hristo,
> 
> I’m not sure if I completely followed your use case, but I believe that you probably want strongly consistent operations if you want to generate a total order over a series of operations.
> 
> Using the sum of the integers of a G-Counter (or a G-Counter built on Riak’s set data structure) does not guarantee a globally unique number; given these counters are designed (and therefore allowed) to diverge, imagine the following scenario, possible due to delays in replication:
> 
> Replica A, G-Counter:
> [{pid1, 2}, {pid2, 1}], Sum: 3
> 
> Replica B, G-Counter:
> [{pid1, 1}, {pid2, 2}], Sum: 3
> 
> These both share the same sum, but should represent unique operations, right?  Did I understand correctly?
> 
> Thanks,
> - Chris
> 
> Christopher Meiklejohn
> Senior Software Engineer
> Basho Technologies, Inc.
> cmeiklejohn at basho.com <mailto:cmeiklejohn at basho.com>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.basho.com/pipermail/riak-users_lists.basho.com/attachments/20150126/35af1053/attachment-0002.html>


More information about the riak-users mailing list