У меня есть таблица cassandra
CREATE TABLE users_by_id (
id bigint PRIMARY KEY,
name text,
email text,
password text,
);
и
CREATE TABLE members_by_org_id_user_id (
organisation bigint,
user bigint,
roles set<bigint>,
PRIMARY KEY (organisation, user)
) WITH CLUSTERING ORDER BY (user DESC);
Если я хочу получить name
каждого члена организации, я мог бы:
SELECT user FROM members_by_org_id_user_id WHERE organisation = ?
и затем выполните SELECT name FROM users_by_id WHERE id in ?
(координатор должен связаться со многими узлами ? = плохо Плохо ли отношение IN в Кассандре для запросов? ) SELECT user from MEMBERS_by_org_id_user_id WHERE organisation = ?
, а затем выполнить запрос для пользователя SELECT name FROM users_by_id WHERE id = ?
(приложение должно связываться со многими узлами, поскольку первичные ключи пользователей различаются ? = менее плохо? Не идеально) - Изменить
members_by_org_id_user_id
на
CREATE TABLE members_by_org_id_user_id (
organisation bigint,
user bigint,
name text,
email text,
PRIMARY KEY (organisation, user)
) WITH CLUSTERING ORDER BY (user DESC);
Проблема с третьим подходом состоит в том, что если пользователь обновляется, все строки членов, которые относятся к этому пользователю, также должны быть обновлены, что, хотя и позволяет приложению связываться только с одним узлом, означает много записи могут потребоваться для каждого обновления ?
Как я могу смоделировать свои данные, чтобы уменьшить каждую из этих проблем или полностью избавиться от них?
Теоретически организация может состоять из до 2000 членов и использование Может быть до 20 организаций.