Help on bucket quorums

Sean Cribbs sean at basho.com
Sun Jun 29 15:27:35 EDT 2014


Roughly. Even with PR/PW you can't say strong _consistency_, but you can
reason about stronger _durability_ and reduced divergence. To truly get
strong consistency, you have to use a consensus algorithm like Paxos, Raft,
etc. Riak 2.0 will have one that you can turn on per-bucket-type.

Generally it is best to use N/2 + 1 ("quorum") for R / W unless you
absolutely know what you're doing. See
https://www.youtube.com/watch?v=FOQVWdG5e2s for a great use-case of R=1
along with other bucket/request properties.


On Sat, Jun 28, 2014 at 3:33 PM, Alex De la rosa <alex.rosa.box at gmail.com>
wrote:

> Hi Sean,
>
> Thank you very much for your explanation :) looks much clearer now.
>
> So... is not viable to set anything to 0 as it would make no sense and
> fail, and also is not appropriate to set anything to the same value as
> "n_value" (in this case 3) as there would be false negatives... so the
> adjustments should be between 1 and 2 (the default)... meaning that we can
> only increase its speed a bit setting some value to 1 (r = 1 if we want to
> read fast, w = 1 if we want to write fast)
>
> For what I see, makes no much sense to change PR and PW... and DW only if
> we really really really want strong consistency. Leaving again just the
> real need to set "r" and "w" if we want to speed up any of the processes.
>
> Am I right?
>
> Cheers,
> Alex
>
>
> On Sat, Jun 28, 2014 at 8:41 PM, Sean Cribbs <sean at basho.com> wrote:
>
>>
>> On Sat, Jun 28, 2014 at 4:55 AM, Alex De la rosa <alex.rosa.box at gmail.com
>> > wrote:
>>
>>> Hi there,
>>>
>>> Can somebody help me understand a bit better the bucket quorums? I will
>>> use the Python API to write code examples:
>>>
>>> Imagine we are building a web app like twitter, and we want fast read
>>> (although not need to be consistent) and safe writings, this R/W
>>> combination is appropriate?
>>>
>>> bucket = client.bucket('twits')
>>>
>>> bucket.r = 1
>>> bucket.w = 3
>>>
>>> # OR
>>>
>>> bucket.set_property('r', 1)
>>> bucket.set_property('w', 3)
>>>
>>> Which method is better to use? or are just exactly the same?
>>>
>>>
>> The pseudo-properties in the first example are exactly the same as the
>> set_property() calls in the second, just a convenience. Generally I
>> wouldn't recommend W=3 because it will tend to create false negatives under
>> heavy load, W=2 (the default) should be sufficient. Keep in mind that R=1
>> with notfound_ok = true (the default) can tend to result in false negative
>> responses as well.
>>
>>
>>> Imagine that in this new case, we want to focus on writing fast
>>> (normally we will write more "twits" than read them)... which would be the
>>> most appropriate/suggested quorums?
>>>
>>> Also, what's really the difference between "r" and "pr"? what is a
>>> "primary replica"?
>>>
>>>
>> Primaries are the replicas (nodes) that are the canonical owners the
>> data, but Riak will let you read and write even if they are not available.
>> If they are not available, fallback replicas (non-owner nodes) will take
>> over in their place. Setting PR or PW > 0 will result in failures if that
>> many primaries are not available (the node is down or partitioned from the
>> node that receives the request).
>>
>>
>>> If i set up bucket.w = 1, it will still do the 3 copies (n_val) in the
>>> background but will reply "true" once 1 copy is saved, right?
>>>
>>>
>> Yes. Keep in mind W is a fast-path response, i.e. "I received the request
>> to write", whereas DW is a "I saved the key to the storage engine". There
>> is no practical reason for DW ever to be 0, in fact I think it is
>> disallowed (or silently upgraded to 1).
>>
>>
>>> Thanks,
>>> Alex
>>>
>>> _______________________________________________
>>> riak-users mailing list
>>> riak-users at lists.basho.com
>>> http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com
>>>
>>>
>>
>>
>> --
>> Sean Cribbs <sean at basho.com>
>> Software Engineer
>> Basho Technologies, Inc.
>> http://basho.com/
>>
>
>


-- 
Sean Cribbs <sean at basho.com>
Software Engineer
Basho Technologies, Inc.
http://basho.com/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.basho.com/pipermail/riak-users_lists.basho.com/attachments/20140629/50cf8ba3/attachment.html>


More information about the riak-users mailing list