The Cassandra Europe conference was also a very good place to learn about rolling out Cassandra in the real life, with a lot of case studies being presented. Before looking at some specific examples, it is interesting to note that
Amazon EC2 (and Cloud in general) is being used in many cases to run Cassandra clusters, mainly in context where workloads are very "spiky".
Cassandra is often rolled out in conjunction with Hadoop, each solution catering for different use cases (real-time versus batch) but working nicely with each other
Let's look at some specifics now with two different cases, one focused on an end-user application and another one on infrastructure monitoring.
Tellybug builds mobile applications that allow participating in television shows from your sofa, which requires handling a massive number of connections (many millions) and data updates in parallel during a fairly short window (a few hours). Cassandra is being used in this case to handle all the parallel insertions, with a dual insertion to a memcached cluster. Because it ended up being easier to scale memcached for real-time queries instead of Cassandra (which can be explained mainly by the fact that an old version of Cassandra was used, with only a fairly new support for counters), especially to count the elements stored in the cluster, the two technologies were deployed.
As trivial as this might seem, counting elements in a highly denormalised environment where a column-based datastore is used, is not an easy thing! This counting issue is progressively being addressed in subsequent versions of Cassandra and hopefully powerful query tools should be available soon.
When you are providing cloud services across an infrastructure of 50k+ servers, monitoring is clearly a key topic. Gary Dusbabek shared some insights on the technical solution used at Rackspace to achieve this goal.
The real-time versus batch aspect is key here: to be able to monitor in real-time events that might be happening across a large number of servers, Cassandra is used in conjunction with a Complex Event Processing solution, Esper, in order to detect patterns on information broadcasted by agents deployed throughout the cloud infrastructure; events are also stored in a Hadoop cluster for post-event analysis as a complement, to make sure patterns can be analysed.
In terms of modelling, Gary shared some interesting points about Cassandra and emphasised the fact that single parent-child relationships are definitely a very efficient pattern to model the data, mainly to ensure scalability afterwards - it is indeed very easy to create hotspots within a Cassandra infrastructure if relationships are too complex.