Реализация таблиц получения всех записей имеет несколько тегов в базе данных Cassandra - PullRequest
0 голосов
/ 01 октября 2019

В базе данных Cassandra у меня есть видео и теги, и у каждого видео может быть несколько тегов.

С приведенной ниже структурой я могу получить видео с одним конкретным тегом:

CREATE TABLE VIDEOS_BY_TAG (
   tag text,
   video_id uuid,
   added_date timestamp,
   primary key ((tag), added_date, video_id)
) WITH CLUSTERING ORDER BY (added_date desc, video_id asc);

Но как я могу иметь видео с несколькими конкретными тегами? например, получить видео со всеми тремя тегами ужасов, романтики и смешные в Кассандре?

1 Ответ

1 голос
/ 01 октября 2019

Вы можете просто использовать предложение IN для вашего запроса.

SELECT *
FROM VIDEOS_BY_TAG
WHERE TAG IN ('HORROR', 'ROMANCE', 'FUNNY');

Каждый тег / предложение может попадать на другой узел, но все записи, возвращаемые для определенного тега, будут поступать с одного узла. Это отлично подходит для небольших количеств. Имейте в виду, что вы не хотите перегружать систему запросом, в котором используется предложение IN, скажем, с 50 тегами, поскольку это может привести к некоторому конфликту из-за результатов с несколькими узлами.

В зависимости от того, как все делается, если это код, лучше всего просто запустить несколько запросов, по одному для каждой TAG. Это было бы лучше, поскольку каждый координатор мог бы работать с определенного узла, который относится к предоставленной TAG. по сравнению с наличием единственного координатора по нескольким узлам из-за предложения IN.

Надеюсь, это имеет смысл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...