understanding optimistic concurrency in Riak
alex at mindlube.com
Fri Oct 4 00:19:47 EDT 2013
Just trying to paraphrase how I understand it from the Riak docs, plus
helpful feedback from Jeremiah :) Please correct if I'm not really
with allow_multi = false, the default setting
- To achieve CAS* -ish behavior for updates, you can always send the
vector clock with a Put. If it fails with a modified message, then you
can retry on the client side. This is the basic optimistic
- If you also set w = all on Puts then this is *almost* guaranteed to
be a true global CAS operation.
- The big exception mainly being extremely frequent writes for that
key, plus some other edge cases.
with allow_multi = true
- You can still use the vector clock to get CAS-ish behavior as above.
- You also have to resolve Sibings through client side logic each time you Get
- It's *still* not guaranteed to be global CAS , there are special
cases like hinted handoff, clock skew, gnarly stuff involving the
speed of light etc.
* CAS = check and set
More information about the riak-users