CAS operation
Chris Goffinet
goffinet at yahoo-inc.com
Sun Sep 9 00:28:44 UTC 2007
Dustin,
I have the prototype of the CAS operation working from the latest
memcache trunk in C using text protocol. I have also patched
libmemcache to do support "gets" and "cas". I will be doing a cleanup,
I can send you the patches later tonight.
Chris Goffinet
goffinet at yahoo-inc.com
On Sep 8, 2007, at 11:26 AM, Dustin Sallings wrote:
>
> [replying back on the list to try to keep the discussion open and
> hopefully avoid repeating myself]
>
> On Sep 8, 2007, at 7:31, Jehiah Czebotar wrote:
>
>> This sounds like the proposed "append" method which would allow
>> memcache to handle lists on the server side... with one caviat, you
>> want a conditional append which only appends if the value isn't
>> already there.
>
> In this example usage...sort of. One would also want to remove
> items from the list to keep it from growing out of control.
>
> There was another proposal to allow updating parts of a value by
> offset or other such things. None of these things can work race-
> free without implementing advisory locks which, as already pointed
> out, may be subject to the LRU.
>
>> If memcached were handling the lists, you wouldn't have to add all
>> that conditional logic and "replace if it's still the same" stuff
>> which won't work in high concurrency situations anyway.
>
> Well, it's not entirely fair to say it doesn't work in high
> concurrency situations. The operation is always atomic, but it may
> need to be retried. This is a common strategy in concurrent
> programming for creating lock-free concurrent data structures. If a
> particular key is too hot, though, you could potentially split it
> into multiple keys to reduce retries in practice. In the current
> example, you could have a series of current_login keys hashed by
> uid. Your contention is reduced by the number of keys. There's
> never a case where you blindly overwrite values, though.
>
> Adding an add-this-to-a-list-if-it-does-not-exist-and-remove-
> something-else-to-keep-the-list-to-n-elements would be an
> unreasonable operation to add. The only reasonable way to do
> something like this would be to add server-side scripting and then
> effectively write the exact operations you need so that they may be
> performed atomically.
>
> Are there enough potential server-side operations to really justify
> a scripting interface? When it's been brought up in meetings, the
> response has varied from interest, to a warning about crossing
> streams or something.
>
> Both a CAS and a scripting interface provide a foundation for
> building atomic data structure manipulation without having to define
> all of the data structures and all of the operations at the protocol
> level. Each has downside. With CAS, you may have to retry a few
> times under contention and this would be amplified by the latency.
> With scripting, you may easily slow down the whole server, and you
> have to deal with how parameters are passed in and results are
> returned -- and this would mean very different things by protocol.
>
> --
> Dustin
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.danga.com/pipermail/memcached/attachments/20070908/5f86530b/attachment.htm
More information about the memcached
mailing list