Выбор ответа Senior NoSQL и выбор хранилища обновлено

Запросы в Cassandra

Вопрос

Таблица в Cassandra с PRIMARY KEY ((user_id), created_at). Какой запрос будет эффективным без дополнительных индексов?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Последние 20 событий одного userid. Ключ партиции userid определяет, на каком узле лежат данные, а createdat задаёт порядок внутри партиции.

Варианты ответа

  1. Все события за вчера по всем пользователям сразу
  2. Число событий по каждому пользователю за месяц
  3. Последние 20 событий одного user_idправильный ответ
  4. Поиск событий по подстроке в тексте сообщения

Разбор

Ключ партиции user_id определяет, на каком узле лежат данные, а created_at задаёт порядок внутри партиции. Поэтому запрос по конкретному user_id с диапазоном или сортировкой по created_at читает одну партицию последовательно. Запрос по дате без user_id требует обойти все партиции на всех узлах (Cassandra требует ALLOW FILTERING). Агрегаты по всем пользователям и полнотекстовый поиск это задачи для других систем. В Cassandra таблицы проектируют под запросы, часто дублируя данные.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.