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

Ключ партиции в Cassandra

Вопрос

В Cassandra таблица сообщений имеет PRIMARY KEY ((chat_id), message_id). Какой запрос будет эффективным?

CREATE TABLE messages (
  chat_id    uuid,
  message_id timeuuid,
  author_id  uuid,
  body       text,
  PRIMARY KEY ((chat_id), message_id)
) WITH CLUSTERING ORDER BY (message_id DESC);

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

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

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

Коротко

Правильный ответ: Последние 50 сообщений конкретного чата. chatid это ключ партиции: все сообщения чата лежат вместе и отсортированы по кластерному ключу messageid, поэтому «последние 50 сообщений чата» читаются из одной партиции.

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

  1. Все сообщения пользователя по author_id
  2. Поиск сообщений по тексту
  3. Подсчёт сообщений по всем чатам за день
  4. Последние 50 сообщений конкретного чатаправильный ответ

Разбор

chat_id это ключ партиции: все сообщения чата лежат вместе и отсортированы по кластерному ключу message_id, поэтому «последние 50 сообщений чата» читаются из одной партиции. Запрос по author_id потребует сканирования всех партиций (или отдельной таблицы под этот запрос). Текстового поиска в Cassandra нет. Агрегаты по всем партициям дороги, это задача аналитической БД.

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

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

Термины по теме