Обновления в кассандре

Моделирование данных Cassandra уважает «Денормализация и дублирование данных - это факт жизни с Cassandra». Но один из минусов деморализованных данных — очень сложные обновления. Например, если у меня есть три таблицы, предназначенные для разных запросов, выбор будет в порядке. Однако, если в моем приложении я хочу обновить имя пользователя и мне нужно обновить эти три таблицы? Обновление в первой таблице выглядит нормально. Как насчет последних двух? Упасты будут очень дорогими? Как мне поступить в этом случае?

CREATE TABLE users_by_username (
    username text PRIMARY KEY,
    email text,
    age int
)

CREATE TABLE users_by_email (
    email text PRIMARY KEY,
    username text,
    age int
)

CREATE TABLE groups (
    groupname text,
    username text,
    email text,
    age int,
    hash_prefix int,
    PRIMARY KEY ((groupname, hash_prefix), username)
)

person Hammer    schedule 16.05.2016    source источник
comment
Да, вы должны обновить их отдельно. Это не дорого с точки зрения вычислений, но должно быть довольно быстрым. По крайней мере, это то, что я видел на практике.   -  person Don Branson    schedule 16.05.2016
comment
Но последние обновления эквивалентны поиску плюс изменение, верно? Разве это не должно быть медленным, поскольку вы на самом деле работаете с непервичным ключом?   -  person Hammer    schedule 17.05.2016
comment
Вы запускали свои обновления и рассчитывали их время? Это способ узнать наверняка.   -  person Don Branson    schedule 17.05.2016
comment
Вы изучали использование материализованных представлений для таких простых денормализации?   -  person Chris Lohfink    schedule 18.05.2016
comment
@ Дон Брэнсон, да, попробую. Просто хочу понять, как cassandra обрабатывает обновления.   -  person Hammer    schedule 18.05.2016
comment
@ Крис, спасибо. Да, материализованное представление — хорошая идея. Но мне просто интересно, как обновления обрабатываются в cassandra, не обязательно только для cassandra3   -  person Hammer    schedule 18.05.2016
comment
Или это потому, что реального обновления нет, а запись идет за кулисами, на что кассандра гд?   -  person Hammer    schedule 18.05.2016
comment
на самом деле это не ответ, но на academy.datastax.com есть бесплатный материал, который расскажет вам, как работают обновления. и моделирование данных (это немного для вопроса SO). На ютубе тоже куча всего.   -  person Chris Lohfink    schedule 18.05.2016


Ответы (2)


Это типичная проблема, которую я вижу, когда люди пытаются поместить реляционную модель в Cassandra, которая со временем обновляется. Cassandra — отличная база данных, и для того, что она делает, она творит чудеса. Существует множество функций, которые позволяют использовать все виды различных моделей данных, и вы можете охватить практически все варианты использования. Когда вы смотрите на свой вариант использования, возникает вопрос, почему вы используете Cassandra для реляционной модели? Если вы действительно хотите, чтобы Cassandra покрывала ваш вариант использования, вам придется выполнять множество различных операций на уровне приложения только для выполнения обновлений и поддержания ваших данных в согласованном состоянии.

person Matija Gobec    schedule 17.05.2016
comment
Эти примеры взяты из cassandra doc. Не могли бы вы уточнить поставленный вопрос? - person Hammer; 18.05.2016
comment
В соответствии с вопросом вы можете сгенерировать uuid для пользователей, помещенных во все связанные таблицы, чтобы вы могли выполнять обновления в таблице пользователей без необходимости выполнять сложные обновления в коде. Вы даже можете написать код приложения, который обновляет всю информацию о пользователях в опубликованных вами таблицах, но это, как правило, усложняется. Если я вынужден иметь такую ​​модель, я предпочитаю выполнять соединения на уровне приложения и иметь одну пользовательскую таблицу. - person Matija Gobec; 19.05.2016
comment
использование uuid во всей таблице создаст еще один запрос, необходимый для правильного получения фактического имени пользователя? - person Hammer; 19.05.2016
comment
Да, это будет, но это цена, которую нужно заплатить - person Matija Gobec; 20.05.2016
comment
Как пишет дешево и быстро. Стоит ли добавлять еще один запрос? - person Hammer; 20.05.2016
comment
Это стоит того. Будьте осторожны при этом, так как между чтениями ваши данные будут в несогласованном состоянии. Если это мешает вам, подумайте о пакетной записи, если вы обновляете сущность пользователя в нескольких таблицах. - person Matija Gobec; 20.05.2016

После просмотра нескольких клипов на YouTube кажется, что обновление Canssandra — это простая запись для добавления записи в журнал фиксации в файловой системе. Затем данные помещаются в memtable на сервере cassandra и сразу же отправляются подтверждение клиенту. Таким образом, вызов обновления завершается. Это делает обновление быстрым для клиентов.

После этого происходит весь процесс уплотнения, включая сброс, последовательную запись и слияние на основе метки времени.

person Hammer    schedule 20.05.2016
comment
Если ваш вопрос заключается в том, насколько быстро происходит обновление, ответ будет таким же быстрым, как вставка, но если ваш вопрос заключается в том, насколько сложно будет поддерживать эту модель (из первого вопроса), то ответ не будет простым. - person Matija Gobec; 20.05.2016