My test consisted of writing 2000 values and then reading them back; I repeated this for various sized objects. I used only a single Memcached Java object with a compression threshold of 16KB. I did not adjust any of the defaults.
The tests were run on Java 1.6, under Mac OS X, and a single instance of memcached 1.2.4 on localhost with 64MB of memory. The computer has 4 CPU cores.
Here are the results for the Whalin client (numbers are in milliseconds):
N: 2000 Size: 2 Store: 980 Fetch: 1372 kbPerSecond: 2 FetchesPerSecond: 1457 N: 2000 Size: 4 Store: 596 Fetch: 1245 kbPerSecond: 6 FetchesPerSecond: 1605 N: 2000 Size: 9 Store: 503 Fetch: 1122 kbPerSecond: 15 FetchesPerSecond: 1782 N: 2000 Size: 19 Store: 391 Fetch: 1007 kbPerSecond: 36 FetchesPerSecond: 1984 N: 2000 Size: 39 Store: 390 Fetch: 1013 kbPerSecond: 75 FetchesPerSecond: 1973 N: 2000 Size: 81 Store: 363 Fetch: 992 kbPerSecond: 159 FetchesPerSecond: 2015 N: 2000 Size: 168 Store: 370 Fetch: 978 kbPerSecond: 335 FetchesPerSecond: 2043 N: 2000 Size: 350 Store: 357 Fetch: 967 kbPerSecond: 706 FetchesPerSecond: 2067 N: 2000 Size: 729 Store: 375 Fetch: 1004 kbPerSecond: 1416 FetchesPerSecond: 1990 N: 2000 Size: 1516 Store: 391 Fetch: 1051 kbPerSecond: 2815 FetchesPerSecond: 1901 N: 2000 Size: 3154 Store: 398 Fetch: 1034 kbPerSecond: 5956 FetchesPerSecond: 1933 N: 2000 Size: 6561 Store: 426 Fetch: 1072 kbPerSecond: 11946 FetchesPerSecond: 1864 N: 2000 Size: 13647 Store: 545 Fetch: 1010 kbPerSecond: 26369 FetchesPerSecond: 1978 N: 2000 Size: 28388 Store: 2321 Fetch: 1346 kbPerSecond: 41172 FetchesPerSecond: 1485 N: 2000 Size: 59049 Store: 3681 Fetch: 1347 kbPerSecond: 85571 FetchesPerSecond: 1483
Total: 28666 ms And here are the results with 'spymemcached':N: 2000 Size: 2 Store: 479 Fetch: 1081 kbPerSecond: 3 FetchesPerSecond: 1849 N: 2000 Size: 4 Store: 196 Fetch: 831 kbPerSecond: 9 FetchesPerSecond: 2405 N: 2000 Size: 9 Store: 127 Fetch: 624 kbPerSecond: 28 FetchesPerSecond: 3203 N: 2000 Size: 19 Store: 56 Fetch: 533 kbPerSecond: 69 FetchesPerSecond: 3750 N: 2000 Size: 39 Store: 66 Fetch: 534 kbPerSecond: 142 FetchesPerSecond: 3740 N: 2000 Size: 81 Store: 65 Fetch: 470 kbPerSecond: 336 FetchesPerSecond: 4252 N: 2000 Size: 168 Store: 41 Fetch: 452 kbPerSecond: 725 FetchesPerSecond: 4424 N: 2000 Size: 350 Store: 42 Fetch: 449 kbPerSecond: 1522 FetchesPerSecond: 4454 N: 2000 Size: 729 Store: 46 Fetch: 457 kbPerSecond: 3112 FetchesPerSecond: 4371 N: 2000 Size: 1516 Store: 50 Fetch: 449 kbPerSecond: 6594 FetchesPerSecond: 4454 N: 2000 Size: 3154 Store: 57 Fetch: 442 kbPerSecond: 13918 FetchesPerSecond: 4518 N: 2000 Size: 6561 Store: 131 Fetch: 476 kbPerSecond: 26876 FetchesPerSecond: 4194 N: 2000 Size: 13647 Store: 227 Fetch: 495 kbPerSecond: 53830 FetchesPerSecond: 4039 N: 2000 Size: 28388 Store: 1452 Fetch: 1044 kbPerSecond: 53074 FetchesPerSecond: 1914 N: 2000 Size: 59049 Store: 2388 Fetch: 1131 kbPerSecond: 101952 FetchesPerSecond: 1768
Total: 14909 msThe total time is almost half with 'spymemcached'. However, the results get even more interesting when you use multiple threads. I repeated the test with 4 threads and the total time for the Walins client increased to 101415 ms, while 'spymemcached' only increased to 29535. Perhaps you could get better performance out of the Walins client by tweaking some settings, but it does seem that 'spymemcached' is the way to go if you care at all about performance. The async set can be especially helpful.
I did not look at the CPU usage while the test was running, but I would expect that 'spymemcached' has the edge here as well.
-- Kristian
smime.p7s
Description: S/MIME cryptographic signature