Next Major Memcached release / roadmap?

Nathan Schmidt nathan at pbwiki.com
Wed May 30 16:22:02 UTC 2007


Paul -


The ring buffers patch is too rough to merge as is -- we've bumped it  
down our internal priority list for the time being but were planning  
to return to it in a month or two.

Having sat on the patch for a bit, I think it will be smarter to make  
it use a prefixes (such as proposed) instead of new top-level  
commands as used in my initial patch. Best to not require a patched  
client library if possible, and I've convinced myself the prefix  
approach will work quite well once built.

In terms of extensibility, how about adding a query command to stats,  
so app code can verify server capability if necessary?

stats extensions\r\n
EXTENSIONS ringbuffer,append,changetimeout,randomlydeletemydata\r\n

For preserving performance, of course you don't want to strncmp 
('ringbuffer:') for every get. We could add standard key prefix  
signal, so if (key[0] == ':') then further checking is performed, but  
unless your keys already start with ':' you don't take much of a  
performance hit with other processes. That makes a full append look  
like this:

set :append:existing_key 0 0 8\r\n
moredata\r\n
STORED\r\n



For ring buffers, similar process. On a client lib, this would look like
$m->set(":ringbuffer:actual_key","xxxx") -- the xxxx data is a dummy  
value of strlen n where n = number of slots to allocate for the ring  
buffer. This looks a little gimpy, there's probably a more elegant  
approach.

set :ringbuffer:actual_key 0 0 4\r\n
xxxx
STORED\r\n

set :ringpush:actual_key 0 0 7\r\n
mydata1\r\n
STORED\r\n

set :ringpush:actual_key 0 0 7\r\n
mydata2\r\n
STORED\r\n

get :ringbuffer:actual_key\r\n
mydata1mydata2\r\n
END\r\n


Thanks,
-nathan


On May 30, 2007, at 4:47 AM, Paul Lindner wrote:

> I've been thinking of where memcached is now and where it might go in
> the future.  I was hoping the community could come together and define
> a roadmap of possible features to be added/incorporated in future
> memcached releases.
>
> Some patches that are floating around and are not yet committed
> include:
>
>  * non-expiring entries patch from Paul G
>  * Ring buffers patch from Nathan.
>  * Append data to existing entry from Filipe
>
> Also I have tasked myself with integrating some of Hi5's custom server
> code into memcached.  This code would include variants of the
> memcached storage architecture and some possible background worker
> threads.
>
> Open issues that need consensus:
>
>   * Protocol changes -- do we want to extend memcached protocol to
>     support new features?  If so, what is the logical way to do this.
>
>   * "Magic" values?  Do we want to allow some kind of mapping of
>     client data to variations in server behavior?
>
>     For example the non-expiration patch allows you to configure a
>     value that results in a non-expiring item.
>
>     Others have proposed that special features be enabled for a common
>     prefix -- say all keys that have a  "ringbuffer:" prefix use that
>     code path / storage engine..
>
>   * How do we accomodate new features without affecting performance.
>
>   * More? I'm sure there is..
>
>
> Hopefully this gets things going.  I hope we can agree on the right
> approach so we can incorporate as many community contributions as is
> possible and feasible.
>
>
> -- 
> Paul Lindner        ||||| | | | |  |  |  |   |   |
> lindner at inuus.com



More information about the memcached mailing list