Я бы назвал вашу текущую модель данных традиционной сущностью / реляционным дизайном. Это имеет смысл использовать с базой данных SQL. Когда у вас есть реляционная база данных, вы полагаетесь на объединения для построения своих представлений, охватывающих несколько объектов.
Кассандра не имеет возможности выполнять соединения. Поэтому вместо того, чтобы моделировать ваши данные на основе ваших сущностей и отношений, вы должны смоделировать их на основе того, как вы собираетесь их запрашивать. Для вашего примера «всех сообщений от людей, за которыми следит пользователь», у вас может быть семейство столбцов, где ключ строки - это идентификатор пользователя, а столбцы - это все сообщения от людей, за которыми следует пользователь (где имя столбца - отметка времени + идентификатор пользователя и значением является сообщение):
RowKey Columns
-------------------------------------------------------------------
| | TimeStamp0:UserA | TimeStamp1:UserB | TimeStamp2:UserA |
| UserID |------------------|------------------|------------------|
| | Message | Message | Message |
-------------------------------------------------------------------
Возможно, вам также понадобится семейство столбцов со всеми сообщениями, написанными конкретным пользователем (я предполагаю, что сообщение передается всем пользователям, а не адресовано одному конкретному пользователю):
RowKey Columns
--------------------------------------------------------
| | TimeStamp0 | TimeStamp1 | TimeStamp2 |
| UserID |------------|------------|-------------------|
| | Message | Message | Message |
--------------------------------------------------------
Теперь, когда вы создаете новое сообщение, вам нужно будет вставить его в нескольких местах. Но когда вам нужно перечислить все сообщения от людей, за которыми следит пользователь, вам нужно извлечь только из одной строки (это быстро).
Очевидно, что если вы поддерживаете обновление или удаление сообщений, вам нужно будет делать это везде, где есть копия сообщения. Вам также нужно будет подумать о том, что должно произойти, когда пользователь подписывается на пользователя или отписывается от него. Существует несколько решений этой проблемы, и ваше решение будет зависеть от того, как вы хотите, чтобы ваше приложение работало.