binary protocol notes from the facebook hackathon
marc at corky.net
marc at corky.net
Wed Jul 11 07:45:24 UTC 2007
Hi everyone,
I'm happy to see a nice and compact result with zero bloat. I'm also
happy you guys kept alignment within the request/response struct and
that would help performance.
I see byte ordering is mentioned twice; the length field both in the
request and response.
While network byte ordering (Big Endian) is traditionally the 'right'
thing to do (or the default thing to do), in most cases it's a minor
performance hit due to constant swapping. Since we're implementing a
binary protocol specifically to avoid/minimize minor performance hits
and since this is a brand new protocol I would recommend to keep all
values as Little Endian because:
- It's easier that all values are kept to a the same endianess; reduces
confusion.
- Nowadays MOST (but obviously not all) servers are running little
endian. So this saves byte swapping for most people's cases and thus a
few cycles are spared on each request -- isn't that the whole point? ;)
And since I mentioned alignment at the top; Would the entire packet,
including its payload, be aligned? It can be a waste of up to a three
bytes per stored object but could potentially improve performance a
little bit -- something entertaining to benchmark -- think we'll be able
to notice a timing difference above the noise level? :)
Marc
More information about the memcached
mailing list