Hi,
We are using (or will use in later versions) cassandra as backend for a
java based CMS called SiteVision. Cassandra runs in the same jvm as the
servlet container and is started by the CMS webapp. Each cluster node is
a stand-alone installation of the CMS. Our production environments
includes clusters ranging from 1 to 5 nodes in house at around 150
customers and the product has been around for about 10 years.
SiteVision uses cassandra to store the domain model where each domain
object has an unique id corresponding to the row key and a number of
aspects (uses a home made AOP framework) which are serialized java
objects stored in columns. We set replication factor to the same as the
number of nodes and read / write uses CL - ONE.
The application logic needs to be sure that a read preceded by a write
always returns the written object. This is normally the case when the
local node is the one that is the fastest. If the local node however for
some reason is a bit slow, a remote node may answer faster which breaks
the the consistent "write - read" scenario (has been proven to occur
during tests). The obvious solution to this would be to to use CL -
QUORUM, but this is to slow for us. What we would need is some kind of
of CL - "locally consistent ONE" where cassandra makes sure that the
local node is asked, even if it is not the fastest answering node.
I've patched the classes WriteResponseHandler and ReadCallback to make
sure that the local node has returned before sending the condition
signal. Can anyone see any drawbacks with this approach? I realize this
will only work as long as the replication factor is the same as the
number of nodes, but that is ok for our scenario.
Kind regards
--
Mikael Wikblom
Software Architect
SiteVision AB
019-217058
mikael.wikb...@sitevision.se
http://www.sitevision.se