Выбор ответа 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 сообщений чата» читаются из одной партиции.
Варианты ответа
- Все сообщения пользователя по author_id
- Поиск сообщений по тексту
- Подсчёт сообщений по всем чатам за день
- Последние 50 сообщений конкретного чатаправильный ответ
Разбор
chat_id это ключ партиции: все сообщения чата лежат вместе и отсортированы по кластерному ключу message_id, поэтому «последние 50 сообщений чата» читаются из одной партиции. Запрос по author_id потребует сканирования всех партиций (или отдельной таблицы под этот запрос). Текстового поиска в Cassandra нет. Агрегаты по всем партициям дороги, это задача аналитической БД.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.