У меня возникли проблемы с выяснением того, как поддерживать обновления атрибутов для нескольких таблиц, чтобы обеспечить согласованность данных.Как поддерживать согласованность данных в нескольких таблицах в кассандре?
Например, предположим, что у меня есть отношения «многие ко многим» между актерами и фанатами. Фанат может поддержать многих актеров, и у актера есть много поклонников. Я делаю несколько таблиц, чтобы поддержать мои запросы
CREATE TABLE fans (
fan_id uuid,
fan_attr_1 int,
fan_attr_2 int
PRIMARY KEY ((fan_id))
)
CREATE TABLE actors (
actor_id uuid,
actor_attr_1 int,
actor_attr_2 int
PRIMARY KEY ((actor_id))
)
CREATE TABLE actors_by_fan (
fan_id uuid,
actor_id uuid,
actor_attr_1 int,
actor_attr_2 int
PRIMARY KEY (fan_id, actor_id)
)
CREATE TABLE fans_by_actor (
actor_id uuid,
fan_id uuid,
fan_attr_1 int,
fan_attr_2 int
PRIMARY KEY (actor_id, fan_id)
)
Допустим, я фанат, и я нахожусь на моей странице настроек, и я хочу изменить мой fan_attr_1
другого значения.
В таблице fans
я могу точно обновить свой атрибут, так как приложение знает мой fan_id и может использовать этот ключ.
Однако я не могу изменить свой fan_attr_1
на fans_by_actor
без предварительного запроса для actor_ids, привязанного к вентилятору.
Эта проблема возникает в любое время, когда вы хотите обновить любой атрибут fans
или actors
.
Я пробовал искать онлайн для людей, испытывающих подобные проблемы, но я не мог их найти. Например, в курсе Data Dataing Datastax они используют примеры с актерами и видеороликами во многих отношениях, где у них есть таблицы actors_by_video
и videos_by_actor
. Курс, как и другие онлайн-ресурсы, с которыми я консультировался, обсуждал таблицы моделирования после запросов, но не вникнул в то, как сохранить целостность данных. В таблице actors_by_video
, что произойдет, если я хочу изменить атрибут актера? Не нужно было бы проходить через каждую строку actors_by_video
, чтобы найти разделы, содержащие актера, и обновить атрибут? Это звучит очень неэффективно. Другой вариант заключается в том, чтобы искать идентификатор видео заранее, но я читал в другом месте, которое читает до того, как записи являются антипаттером в Кассандре.
Каким будет наилучший подход для решения этой проблемы либо с точки зрения моделирования данных, либо с точки зрения CQL?
EDIT: - Фиксированные приговаривают окурки - Добавлен контекст и предварительное исследование
Какие вопросы вы собираетесь сделать?Вы моделируете свои данные вокруг запросов, а не вокруг их отношений (это не реляционный db). Мог бы проверить https://academy.datastax.com/resources/ds220-data-modeling для некоторых уроков по моделированию данных в cassandra –
Да, я действительно взял курс, прежде чем спрашивать здесь, но курс, похоже, не отвечает на вопросы самих себя. В своем примере KillrVideo они используют как «video_by_actor», так и «act_by_videos», что является аналогичной парадигмой, описанной выше. Однако они никогда не обсуждали, как эти таблицы должны поддерживаться, если атрибут актера или изменение атрибута видео –