2015-03-06 5 views
2

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

  • Получить все мероприятия для пользователя A за последнюю неделю.
  • Получить все события для всех пользователей за вчерашний день, когда источником события является источник S.
  • Получить все события за последний месяц.

Низкая латентность читает мою самую большую проблему здесь. Из моих исследований лучший способ, я могу думать, что это реализовать, - это разные таблицы счетчиков для каждой перестановки источника, пользователя и предопределенного времени. Например, создайте таблицу count_by_source_and_user, где ключ раздела представляет собой комбинацию источника и идентификатора пользователя, а затем создайте таблицу count_by_user только для подсчетов пользователей.

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

ответ

3

Вы правы. Если задержка является вашей главной проблемой, и должно быть, если вы уже выбрали Cassandra, вам нужно создать таблицу для каждого из ваших запросов. Это рекомендуемый способ использования Cassandra: оптимизируйте для чтения и не беспокойтесь о резервном хранении. И так как в каждой таблице данные хранятся последовательно в соответствии с индексом, вы не можете индексировать таблицу более чем одним способом (как это было бы с реляционной БД). Надеюсь, это поможет. Ищите презентацию «Data Modeling», которая обычно дается в событиях «День Кассандры». Вы можете найти его в блоге «Планета Кассандра» или Джона Хаддада.

Смежные вопросы