My previous examination of Tokyo Tyrant’s memcache protocol support showed how you can use memcache-client directly with TT. John Mettraux has created Ruby bindings for TT’s own native client for ultimate speed. Let’s take a look at how this affects performance:
require 'rufus/tokyo/tyrant' db = Rufus::Tokyo::Tyrant.new('localhost', 1978) Benchmark.bm(20) do |b| b.report 'native-write' do 10_000.times do |idx| db[idx.to_s] = idx.to_s*100 end end b.report 'native-read' do 10_000.times do db[rand(100).to_s] end end end
user system total real
native-write 0.150000 0.220000 0.370000 ( 1.079804)
native-read 0.160000 0.210000 0.370000 ( 1.093927)
memcache186-write 0.530000 0.210000 0.740000 ( 1.750988)
memcache186-read 0.580000 0.200000 0.780000 ( 1.830207)
memcache191-write 0.430000 0.230000 0.660000 ( 1.528519)
memcache191-read 0.410000 0.220000 0.630000 ( 1.591678)
I’ve included the memcache protocol times right after for comparision. Notice the system time is basically unchanged but the user time is dramatically lower. This is the overhead of the memcache-client’s pure Ruby networking layer. Ruby is a great language but its networking implementation is not blindingly fast. There’s definite improvement in Ruby 1.9.1 but still nowhere near bare metal.
1 response so far ↓
1 John Mettraux // Mar 14, 2009 at 11:52 pm
Hi Mike,
for the ‘ultimate speed’, you might want to check ActAsFlinn’s ruby-tokyotyrant :
http://github.com/actsasflinn/ruby-tokyotyrant/
It’s experimental, but very promising (true C extension, not FFI).
Leave a Comment