дизайн схемы для кассандры - PullRequest
4 голосов
/ 09 января 2011

Я работаю над проектом форума, который позволяет пользователю следить за вопросами по определенным темам из своей сети.

Стена новостной ленты пользователя содержит только те вопросы, которые были опубликованы его связями ипомечены на следующие темы.Я запутался, какая модель базы данных будет наиболее подходящей для такого приложения.Я смотрю на решения Cassandra и MySQL на данный момент.

После изучения Cassandra я понял, что простой дизайн новостной ленты, показывающий все сообщения из сети, будет легко спроектировать с помощью Cassandra, выполняя быстрые записи всем подписчикам пользователя о записи от пользователя.Но для моего вида приложений, где есть дополнительный фильтр «отслеживаемых тем», я не смог убедить себя в хорошем дизайне схемы в Cassandra.Я надеюсь, что если я что-то упустил из-за моего краткого понимания Кассандры, возможно, не могли бы вы помочь мне с вашими предложениями о том, как этот канал новостей может быть реализован в Кассандре?

1 Ответ

4 голосов
/ 10 января 2011

Я предполагаю, что вы уже изучили пример приложения 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).

Если вы хотите иметь возможность поддерживать временную шкалу для каждого пользователя для каждого пользователя, я предлагаю вам использовать одну строку для каждой интересующей пользователя темы и одну строку для временной шкалы для всех тем.Поскольку вы уже извлекаете подписчиков по темам, легко узнать, какие темы имеют интересующие вас сообщения, поэтому нужно добавить сообщение в правильные сроки для каждой темы.

...