Hi Russell,

Thanks for your response, I understand most of it, I know LWW=true and allow_multi=true won't make any sense, but look at this scenario:

All of our buckets have allow_multi=false except for the one bucket we have for CRDT counters, our application requires certain some level of consistency so we have full control of our reads/writes using a fine grain locking mechanism combined with in-memory cache so in our case the LWW=true is what we would want?, now, we haven't touched this parameter so it is at its default value.

I'm assuming it will improve performance for our case, but, if we set LWW=true, will it affect the bucket(s) with allow_multi=true, is it safe to assume that if allow_multi=true LWW will be ignored? We only modify bucket properties using Riak Java client 1.4.x atm.

Also, about safety, LWW=true uses timestamp? and LWW=false uses vclock?, future of both?, should we leave it untouched? we don't really want to use something that could jeopardise our data consistency requirement even if it means better performance.

Hopefully I'm enriching the subject and not hijacking it,

Thanks,

Guido.

On 30/01/14 12:49, Russell Brown wrote:

On 30 Jan 2014, at 10:58, Guido Medina <guido.med...@temetra.com <mailto:guido.med...@temetra.com>> wrote:

Hi,

Now I'm curious too, according to http://docs.basho.com/riak/latest/ops/advanced/configs/configuration-files/ the default value for Erlang property last_write_wins is false, now, if 95% of the buckets/keys have no siblings (or conflict resolution), does that mean that for such buckets last_write_wins is set to true, I'm wondering what's the effect (if any) if allow_multi on a bucket is false.

In other words; I could assume that:

  * If allow_multi is true then last_write_wins will be ignored
    'cause vclock is needed for conflict resolution?
  * if allow_multi is false then last_write_wins is true?

They’re independant settings, but allow_mult=true + lww=true makes no sense (in reality, in the code, I’m pretty sure the lww=true will be applied.)

allow_mult=false+lww=false means at each vnode there is a read-before-write, and casually dominated values are dropped, while siblings values are made, but before we write to disk (or return to the user on get) we pick the sibling with the highest timestamp. This means that you get _one_ of the causally concurrent values, the one with the largest timestamp.

allow_mult=false+lww=false means that at the coordinating vnode we just increment whatever vclock the put has (probably none, right?) and write it to disk (no read of the local value first) and down stream at the replicas, the same thing, just store it. I need to check, but on a get, if there are siblings, just pick the highest timestamp.

I really think, for riak, 90% of the time, allow_mult=true is your best choice. John Daily did a truly exhaustive set of blog posts on this http://basho.com/understanding-riaks-configurable-behaviors-part-1/ I highly recommend it. If you data is always overwrite maybe LWW makes sense for you. If it is write once, read ever after LWW is perfect.

Cheers

Russell

Correct me if I'm wrong,

Again, we have a very similar scenarios, where we create/modify keys and we are certain we have the latest version so for us last_write_wins...

Regards,

Guido.

On 30/01/14 10:46, Russell Brown wrote:

On 30 Jan 2014, at 10:37, Edgar Veiga <edgarmve...@gmail.com <mailto:edgarmve...@gmail.com>> wrote:

Also,

Using last_write_wins = true, do I need to always send the vclock while on a PUT request? In the official documention it says that riak will look only at the timestamp of the requests.

Ok, from what you’ve said it sounds like you are always wanting to replace what is at a key with the new information you are putting. If that is the case, then you have the perfect use case for LWW=true. And indeed, you do not need to pass a vclock with your put request. And it sounds like there is no need for you to fetch-before-put since that is only to get context /resolve siblings. Curious about your use case if you can share more.

Cheers

Russell



Best regards,


On 29 January 2014 10:29, Edgar Veiga <edgarmve...@gmail.com <mailto:edgarmve...@gmail.com>> wrote:

    Hi Russel,

    No, it doesn't depend. It's always a new value.

    Best regards


    On 29 January 2014 10:10, Russell Brown <russell.br...@me.com
    <mailto:russell.br...@me.com>> wrote:


        On 29 Jan 2014, at 09:57, Edgar Veiga
        <edgarmve...@gmail.com <mailto:edgarmve...@gmail.com>> wrote:

        tl;dr

        If I guarantee that the same key is only written with a 5
        second interval, is last_write_wins=true profitable?

        It depends. Does the value you write depend in anyway on
        the value you read, or is it always that you are just
        getting a totally new value that replaces what is in Riak
        (regardless what is in Riak)?



        On 27 January 2014 23:25, Edgar Veiga
        <edgarmve...@gmail.com <mailto:edgarmve...@gmail.com>> wrote:

            Hi there everyone!

            I would like to know, if my current application is a
            good use case to set last_write_wins to true.

            Basically I have a cluster of node.js workers reading
            and writing to riak. Each node.js worker is
            responsible for a set of keys, so I can guarantee some
            kind of non distributed cache...
            The real deal here is that the writing operation is
            not run evertime an object is changed but each 5
            seconds in a "batch insertion/update" style. This
            brings the guarantee that the same object cannot be
            write to riak at the same time, not event at the same
            seconds, there's always a 5 second window between each
            insertion/update.

            That said, is it profitable to me if I set
            last_write_wins to true? I've been facing some massive
            writting delays under high loads and it would be nice
            if I have some kind of way to tune riak.

            Thanks a lot and keep up the good work!


        _______________________________________________
        riak-users mailing list
        riak-users@lists.basho.com <mailto:riak-users@lists.basho.com>
        http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com






_______________________________________________
riak-users mailing list
riak-users@lists.basho.com
http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com

_______________________________________________
riak-users mailing list
riak-users@lists.basho.com <mailto:riak-users@lists.basho.com>
http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com


_______________________________________________
riak-users mailing list
riak-users@lists.basho.com
http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com

Reply via email to