2016-05-16 2 views
0

Cassandra data modeling respects «Денормализация и дублирование данных - это факт жизни с Кассандрой». Но один из недостатков демармализованных данных делает обновления очень сложными. Например, если у меня есть три стола, обслуживающих разные запросы, выбор в порядке. Однако, если в моем приложении я хочу обновить имя пользователя, и мне нужно обновить эти три таблицы? Обновление в первой таблице выглядит нормально. Как насчет последних двух? Исходы будут очень дорогими? Как я должен обрабатывать этот случай?Обновления в 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) 
) 
+0

Да, вы должны обновить их отдельно. Это не дорого, с точки зрения вычисления, но это должно быть довольно быстро. По крайней мере, это то, что я видел на практике. –

+0

Но последние обновления arr эквивалент поиска плюс изменение вправо? Разве это не должно быть медленным, так как вы фактически работаете над непервичным ключом? – Hammer

+1

Запустили ли вы свои обновления и приурочили их? Это способ узнать наверняка. –

ответ

1

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

+0

Эти примеры взяты из документа cassandra. Не могли бы вы быть более конкретными по поднятому вопросу? – Hammer

+0

В соответствии с вопросом вы можете создать uuid для пользователей, помещенных во все связанные таблицы, чтобы вы могли делать обновления в таблице пользователей, не выполняя сложные обновления кода. Вы даже можете написать код приложения, который обновляет всю информацию о пользователе в таблицах, которые вы опубликовали, но имеет тенденцию усложняться. Если я вынужден иметь такую ​​модель, я предпочитаю присоединяться к уровню приложения и иметь одну пользовательскую таблицу. –

+0

, используя uuid во всей таблице, создаст еще один запрос, необходимый для правильного правильного имени пользователя? – Hammer

-1

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

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

+0

Если ваш вопрос «насколько быстро обновление», ответ «так же быстро, как и вставка», но если ваш вопрос: «Насколько сложно будет поддерживать эту модель (с первого вопроса)», тогда ответ «не идет» быть простым ». –