Anatomy of a compound primary key
At this point, it's clear that there's some nuance in the compound primary key that we're missing. Both the username
column and the id
column affect the order in which rows are returned; however, while the actual ordering of username
is opaque, the ordering of id
is meaningfully related to the information encoded in the id
column.
In the lexicon of Cassandra, username
is a partition key. A table's partition key groups rows together into logically related bundles. In the case of our MyStatus application, each user's timeline is a self-contained data structure, so partitioning the table by user is a sound strategy.
Note
As a general rule, you should endeavor to only query one partition at a time for any core data access your application does. Cassandra stores the rows in each partition together, so queries within a partition are very efficient. Queries across multiple partitions, on the other hand, are expensive and should be avoided...