Вторичные индексы по-прежнему пока не поддерживается, но развитие продолжается (CASSANDRA-4511)
В вашей модели, если вы знаете user_id вы могли бы принести пользователю и проверить, если «боб» в их списке друзей в сторона приложения. Если вам нужно запросить, является ли person_A друзьями с person_B, вы можете извлечь коллекцию в свою собственную таблицу, но для этой модели потребуется выполнить 2 запроса.
CREATE TABLE friends (
user_id text,
friend text,
PRIMARY KEY(user_id, friend)
);
CREATE INDEX idx_friends on friends (friend);
Допустим, есть результат из приведенной выше таблицы, как:
user_id | friend
---------+--------
daniel | bob
daniel | jack
jack | bob
Если вы хотите, чтобы найти все люди, следуя боб, вы можете использовать SELECT * FROM friends WHERE friend='bob'
. Вы могли бы на самом деле сделать это тоже без вторичного индекса и использования ALLOW FILTERING
, но это может привести к непредсказуемой производительности:
опция Разрешить ФИЛЬТРАЦИЮ позволяет явным образом разрешить (некоторые) запросы, которые требуют фильтрации. Обратите внимание, что запрос с использованием ALLOW FILTERING может иметь непредсказуемую производительность (для определения выше), то есть даже запрос, который выбирает несколько записей, может демонстрировать производительность, которая зависит от общего объема данных, хранящихся в кластере.
Docs for ALLOW FILTERING.