Использование коллекций для этого, вероятно, нецелесообразно из-за ограничения размера коллекций (хотя это не должно беспокоить систему с несколькими пользователями), высока вероятность того, что набор пользователей в группе будет слишком большой.
Стоит также отметить, что ваше решение на основе таблицы user_group
не будет работать, поскольку оно не будет поддерживать запросы по группам. Вам нужно будет сохранить другую таблицу для поддержки этого запроса (и всегда поддерживать две записи):
CREATE TABLE group_user (
user UUID,
group UUID,
PRIMARY KEY (group, user)
)
Это позволит выполнять запросы по группам.
Дополнительные опции:
Добавить вторичный индекс к user_group
:
Другой подход заключается в расширении решения user_group
: если у вас есть вторичный индекс в поле group
, вы сможете выполнять поиск в обоих направлениях:
CREATE INDEX ON user_group (group);
Использовать материализованное представление
Вы также можете использовать материализованное представление вместо таблицы group_user
. Данные между user_group
и этим представлением будут синхронизироваться cassandra (в конце концов):
CREATE MATERIALIZED VIEW group_user
AS SELECT group, user
FROM user_group
WHERE user IS NOT NULL AND group IS NOT NULL
PRIMARY KEY (group, user);
При этом вам нужно будет добавить запись только к user_group
, и представление позаботится о поиске по группе.
Как вы заметили, у каждого есть свои плюсы и минусы, которые не могут быть подробно описаны здесь. Пожалуйста, проверьте документы по ограничениям каждого варианта.