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.
We call the id
column a clustering column. The job of a clustering column is to determine the ordering of rows within a partition. This is why we observed that within each user's status updates, the rows were returned in a strictly ascending order by timestamp of the id
. This is a very useful property since our application will want to display status...