cool, thanks
> Date: Thu, 21 Feb 2008 18:40:05 -0800> From: [EMAIL PROTECTED]> To: [EMAIL 
> PROTECTED]> CC: [email protected]> Subject: Re: Alternative Binary 
> Protocol idea for memcached.> > This list is the best.> > Then there's 
> #memcached on irc.freenode.net> > Then there's the wiki linked from 
> danga.com/memcached/> > Development and user assistance both happen on this 
> list. It's> relatively low volume. I don't know of any web forums...> > joe 
> schmo wrote:> > > > Does anyone know of a good site to post questions on 
> regarding problems> > with memcahced?> > > > > > > > > > 
> ------------------------------------------------------------------------> > 
> Date: Thu, 21 Feb 2008 02:42:10 +0000> > From: [EMAIL PROTECTED]> > To: 
> [email protected]> > Subject: Re: Alternative Binary Protocol idea 
> for memcached.> > > > Alright, I've started looking at the code. > > > > 
> Would anyone object if I first started working on abstracting the> > protocol 
> handling routines so that they are handled by callback> > instead of the 
> current if/else setup?> > > > Then I was going to put all the protocol stuff 
> in prot_ascii.h|c and> > prot_binary.h|c respectively.> > > > This way we 
> could potentially have hundreds of protocols handled> > without having a 
> lengthy if/else comparison.> > > > On Wed, Feb 20, 2008 at 10:06 AM, Clint 
> Webb <[EMAIL PROTECTED]> > <mailto:[EMAIL PROTECTED]>> wrote:> > > > I wasn't 
> expecting such a quick reply. Good point about> > allowing multiple 
> protocols. I might pull out some of my old> > code and see how easy it is to 
> drop in.> > > > I thought I'd give a little background on myself and this> > 
> protocol style. I used to work in the controls and automation> > industry. If 
> you've ever checked your luggage into an airport,> > or sent anything thru 
> USPS, UPS or FedEX, or bought anything> > online from amazon, b&n and other 
> large online stores, or from> > Walmart, kmart, target, etc... then your 
> product has likely had> > some experience with my coding somewhere along the 
> line.> > > > I developed this protocol for a tiny little side-project for 
> one> > of the above mentioned companies. It was basically a connector> > that 
> took information from a large number of different systems> > and passed it to 
> another. The requirements changed a lot, so I> > developed something that 
> could be fast, but had to be flexible. > > If I added a feature to the 
> server, I didn't want to be forced> > to update all the clients as well. 
> Also, some of the clients> > were tiny little embedded controllers, so it had 
> to be pretty> > simple too.> > > > This solution was VERY fast, as all the 
> commands are a single> > byte and could be easily mapped to an array of 
> callback> > routines. This protocol also had to run on a real-time system> > 
> also, so we had to ensure that all operations preformed in a> > predictable 
> fashion.> > > > I seperated the commands by their parameter type. 0-31 had 
> no> > parameter. 32-63 had a single byte parameter. 64-95 had a> > 32-bit 
> parameter. 96-127 had a single-byte paramter which was> > the length of a 
> stream of data to follow (short-string). > > 128-159 had a 32-bit integer 
> that was the length of a stream of> > data to follow. This was our 5 
> different parameter types. A> > command could only have one parameter.> > > > 
> This way, the IO handling code could retrieve all the necessary> > data and 
> then pass it off to a callback routine for that command.> > > > Each socket 
> connection would have a set of buffers set aside for> > the incoming data. In 
> this case we would want a buffer set> > aside to hold the key and value 
> data.> > > > To speed up processing and ensure that the minimum data set has> 
> > been provided, we used a 32-bit (or was it 64-bit?) word as> > flags. Each 
> operation would set or clear a flag(s). So when> > a GO command is received, 
> it can quickly determine what 'action'> > needs to take place, and which 
> 'parameters' have been provided.> > > > If we ran out of room having to 
> handle more than 256 commands,> > we would use a command of 0xFF which would 
> expect that the next> > byte would be another command (from a set different 
> to the> > first). I never actually implemented it though. The most> > 
> commands I ever used was about 100 or so.> > > > I cant imagine that a 
> variable-length structured protocol could> > be much faster than that. Still 
> the emphasis of this protocol> > is not so much on speed, but on flexibility 
> to add functionality> > to the protocol (by adding commands) without breaking 
> existing> > clients (and without having to handle multiple versions of the> > 
> protocol).> > > > The 'noreply' stuff that I have seen around the list could> 
> > probably benefit from this protocol. I haven't looked close> > enough at 
> the CAS stuff either, but I suspect that would be easy> > to implement too.> 
> > > > Also, those that want to shave off a few extra bytes in their> > 
> client, have the option of sending a request that only includes> > the bits 
> they want. If you care about expiry leave it out, same> > with flags, tags, 
> cas id's, and anything else. Plus you can> > stream-line some of your 
> requests by not using the CLEAR> > command, and re-using the state.> > > > 
> Dang, if I had a little more time on my hands right now, I'd be> > really 
> tempted to implement it. I don't actually have a *need*> > for this protocol 
> in memcached, it was purely an intellectual> > itch ever since I saw people 
> complaining about the existing> > protocols being difficult to expand.> > > > 
> > > > > On Feb 20, 2008 4:14 PM, Dustin Sallings <[EMAIL PROTECTED]> > 
> <mailto:[EMAIL PROTECTED]>> wrote:> > > > > > On Feb 19, 2008, at 22:20, 
> Clint Webb wrote:> > > > > I know a considerable amount of thought and work 
> has gone> > into the> > > existing flavour of the binary protocol, and I dont 
> expect> > that work> > > to be discarded, I'm really only mentioning this 
> new> > concept now as> > > an alternative for the future if we ever find the 
> current> > binary> > > protocol to be too restrictive and inflexible. And> > 
> something to> > > think about, or even use elsewhere.> > > > The is certainly 
> interesting. The first step of> > doing the binary> > protocol implementation 
> was to create a change that allowed> > multiple> > protocols to coexist. It 
> would be possible to implement> > this to run> > in parallel with the 
> existing protocols in the 1.3 codebase.> > > > Intuitively, it doesn't seem 
> as efficient to process> > as what we've> > got now, but I like being proven 
> wrong, so I'd welcome> > another front-> > end protocol. :)> > > > Of course, 
> I wrote the majority of the current binary> > protocol code> > about six 
> months ago, so I'd really like to at least have> > one in more> > people's 
> hands.> > > > --> > Dustin Sallings> > > > > > > > > > -- > > "Be excellent 
> to each other" > > > > > > > > > > -- > > "Be excellent to each other" > > > 
> > > > 
> ------------------------------------------------------------------------> 
_________________________________________________________________

Reply via email to