Я предполагаю, что вы уже изучили пример приложения Twissandra.Это очень близко к тому, что вы описываете.Вот несколько полезных ссылок:
Основным отличием вашего приложения является введение тем.То, как вы храните данные, зависит от того, как именно вы хотите иметь возможность запрашивать их.Например, вам может быть хорошо, если все темы представлены на одной и той же временной шкале, или вы можете захотеть видеть временную шкалу только для определенной темы (например, для тегов SO).
Если выне требуются отдельные временные шкалы, я рекомендую следующее, используя модель данных Twissandra в качестве базы:
Вместо обычного семейства столбцов FOLLOWERS, поддерживайте по одной строке подписчиков для каждого пользователя для каждый тема.Очевидно, что это требует немного дополнительной работы при создании / изменении / удалении пользователей, но это экономит вашу работу при создании новых сообщений, что составляет большую часть операций, которые вам нужно выполнить.
Когда сообщение сделанопользователем Joe по темам A, B и C вы сможете найти всех заинтересованных пользователей с таким запросом, как:
multiget(FOLLOWERS, ['Joe::A', 'Joe::B', 'Joe::C'])
где 'Joe :: A', 'Joe ::B 'и' Joe :: C 'являются ключами строки.Для каждого подписчика, которого вы получите, вы можете просто добавить UUID поста в качестве имени столбца на временной шкале каждого подписчика (и вам не придется беспокоиться о дубликатах на временной шкале, поскольку вы используете тот же UUID для столбцаname).
Если вы хотите иметь возможность поддерживать временную шкалу для каждого пользователя для каждого пользователя, я предлагаю вам использовать одну строку для каждой интересующей пользователя темы и одну строку для временной шкалы для всех тем.Поскольку вы уже извлекаете подписчиков по темам, легко узнать, какие темы имеют интересующие вас сообщения, поэтому нужно добавить сообщение в правильные сроки для каждой темы.