Should we use memcached or should we go with Java based ehcache? It is not a million dollar question, but at least qualifies as a 100 dollar question :)
I think ehcache be a good
option if it is used as an embedded cache in the application server, as it
won’t involve sockets and serializations. Of course the application or application server must be in Java.
For all other modes, I think performance of ehcache will suffer as it will involve serialize/unserialize of data and data
transfer will happen over sockets. Then I doubt ehcache will be able perform better than memcached.
One major advantage of memcached is that
it has clients almost in every languages. The disadvantage is, it doesn’t
support persistence natively. Membase (or couchbase) and memcachedb have
data persistence and they speak memcached protocol. But do we need
the memory cache to be persistent anyway ?
Ehcache supports HA. Then it cannot act as an embedded cache alone.
HA in memcached can also be achieved
very easily though generally the clients don’t support it directly. We need to just put
the key-value pair in the memcached server that key is hashed to , and also in
the next memcached server in the cluster (or also putting the key-value on a backup cluster of memcached servers).
Achieving elasticity with
memcached looks like a big thing, because I don’t know if we can list all the keys in a
memcached servers. There is the “stats” command for getting a list of keys, but no
idea if it returns all the keys. If we can get the list of all keys we can use
“extendable hashing” to shuffle few keys across the nodes. Only thing is clients
also need to be made aware of addition/deletion of new memcached
servers in a cluster of memcached servers. I am wondering how in a HA environment ehcache does that,
basically how the clients (especially the REST based non-Java clients) will
know of the new destination for a key in cache of there is a change in number of ehcache nodes in the cluster.
I guess for embedded cache (for
JAVA apps only) ehcache will be better.
In all other cases
memcached might be better, but that is my thought only.
No comments:
Post a Comment