You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by Apache Wiki <wi...@apache.org> on 2012/10/05 18:22:35 UTC

[Cassandra Wiki] Update of "Partitioners" by JonathanEllis

Dear Wiki user,

You have subscribed to a wiki page or wiki category on "Cassandra Wiki" for change notification.

The "Partitioners" page has been changed by JonathanEllis:
http://wiki.apache.org/cassandra/Partitioners

New page:
The Partitioner, along with the ReplicationStrategy, is responsible for deciding what data is placed on which nodes in your cluster.

A partition is determined by a ''partition key;'' in the simplest form, a partition is a single row, but a partition may also be made up of multiple rows.

Rows within a partition are ordered, which is often useful at query time.  Rows may be retrieved from a partition in ascending or descending order.  This is covered in more detail here: http://www.datastax.com/dev/blog/schema-in-cassandra-1-1.  A specific example of doing time series data is here: http://www.rustyrazorblade.com/2012/10/cassandra-cql3-and-time-series-data-with-timeuuid/

Cassandra supports the following partitioners, in order of preference.  TLDR: always use !Murmur3Partitioner in new clusters.

== !Murmur3Partitioner ==

This is the default in Cassandra 1.2.  It's functionally the same as RandomPartitioner, but Murmur3 is a much faster hash than MD5.  We don't care about MD5's cryptographic properties; all we need is a good distribution over the hash space, which Murmur3 delivers.

== !RandomPartitioner ==

Default partitioner in Cassandra 1.1 and earlier.  Hashes with MD5.

== !ByteOrderedPartitioner ==

An order-preserving partitioner that operates on partition key bytes lexicographically.

== !OrderPreservingPartitioner ==

Assumes keys are UTF8 strings.  Not recommended both because of this limitation and because globally ordering all your partitions generates hot spots: some partitions close together will get more activity than others, and the node hosting those will be overloaded relative to others.  You can try to mitigate with active load balancing but this works poorly in practice; by the time you can adjust token assignments so that less hot partitions are on the overloaded node, your workload often changes enough that the hot spot is now elsewhere.  Remember that preserving global order means you can't just pick and choose hot partitions to relocate, you have to relocate contiguous ranges.