> During tests I've done mass mutations using an import of data. Using
> CL.QUORUM the import takes around 3 times longer that using CL.ONE on a
> cluster with 3 nodes.

Is the test sequential or multi-threaded? A factor 3 performance
difference seems like a lot in terms of total throughput; but it's
easier to buy if it is due to higher latency resulting from use of
QUORUM.

In other words: What I'm saying is that assuming bottlenecks are are
being saturated (sufficient concurrency, etc) I would expect that
CL.ONE and CL.QUORUM be roughly similar in their *throughput* (writes
per second). However for a single sequential client, or fewer
concurrent clients than necessary, it makes sense to see a
significantly worse throughput as a result of higher latency, as low
concurrency means you're not saturating the system.

If you're really seeing a 3x difference with concurrency cranked up
that might be worth investigating IMO.

> I think this is an expected behavior though, in the CL.ONE case more or less
> all reads / writes will be done locally whereas using QUORUM all operations
> are done locally and remotely.

It's expected that latency on an individual request will be higher
because (1) you are doing another level of network round-trips, and
(2) there is always variation in latency and having to wait for more
than one means a higher probability of having to wait a bit longer
just for that reason.

If you use case is that you're e.g. doing a few writes, a few reads,
and returning a page - higher latencies on these reads and writes are
expected to translate to slower page (or whatever) load times. But - I
still think that the overall throughput, as long as concurrency is
high enough, should be roughly similar for ONE and QUORUOM *for
writes*. For reads, CL.ONE is definitely expected to be faster even in
terms of throughput, since you are in fact doing 1/RF times the amount
of reads.

> Giving the locally consistent ONE approach we avoid consistency problems
> when the local node is slow, and the import time is more or less the same as
> with CL.ONE. We do however introduce potentially slower  reads / writes when
> the response time of local node it slower that any of the remote nodes,  but
> because cassandra is embedded in SiteVision the entire jvm will probably
> react slowly at this stage - a fast read from a remote node will not help
> much.

Makes sense.

> An other problem with using QUORUM is that it does not scale well in the
> case of big production environments. There are cases when a customer
> temporarily uses up to 10 nodes where QUORUM would mean reading / writing to
> 6 nodes.

So writes would still be expensive, but CL.ONE should get you 1/6 the
cost (CPU/disk) related to QUORUM in this case.

I do want to point out though that it is somewhat of a fundamental
limitation as long as you tie RF to cluster size, and will become a
scalability problem even if you use CL.ONE due to reads (and for that
matter due to repair becoming more expensive).

If I may ask, what are you primarly targeting here - is it about
shaving a single millisecond or two off of the average request, or is
it the number of requests per second in total for a single "task"
(page load, etc), or is it overall throughput of the system (total
amount of h/w required)?

I'm mostly trying to figure out whether you are having some problem
with latency or throughput that is not just a result of an extra few
milli seconds of an additional round-trip time. If there is some other
solution to the problem, the patching you describe, and limiting
yourself in scaling by fixing RF=number of nodes, seems like kind of a
high price to pay.

Obviously I don't know fully your situation so take that with a grain
of salt. Just my knee-jerk reaction from what I've read so far.

-- 
/ Peter Schuller (@scode, http://worldmodscode.wordpress.com)

Reply via email to