Как вы ОБНОВЛЯЕТЕ колонку Кассандры, не зная непосредственно первичный ключ? - PullRequest
0 голосов
/ 28 января 2019

Учитывая сценарий, где у вас есть таблица User, с id в качестве ПЕРВИЧНОГО КЛЮЧА.У вас есть столбец с именем email и столбец с именем name.

Вы хотите UPDATE User.name на основе User.email

Я понял, что UPDATEКоманда требует от вас передать ПЕРВИЧНЫЙ КЛЮЧ.Означает ли это, что я не могу использовать чистую миграцию CQL, и мне нужно сначала запросить первичный ключ User.id, прежде чем я смогу UPDATE?

В этом случае я действительно знаю ПЕРВИЧНЫЙКЛЮЧ, потому что UUID одинаковы для dev и prod, но он выглядит грязным.

Ответы [ 2 ]

0 голосов
/ 29 января 2019

Я думаю, Ответ Алекса охватывает ваш вопрос - «как мне найти значение в столбце PK, работающее в обратном направлении от значения столбца не-PK?».

Однако яДумаю, стоит отметить, что, задавая этот вопрос, вы должны пересмотреть свою модель данных.Основное правило при разработке модели данных C * заключается в том, что вы начинаете с рассмотрения необходимых запросов и пропускаете вариант использования запроса UPDATE.Вы, вероятно, можете заставить все работать без изменения вашей модели на данный момент, но если вы обнаружите, что вам нужно сделать другие запросы, к которым вы не готовы, вы столкнетесь с проблемами в работе с большим количеством индексов и / или MV.

В целом, поиск статей и других ресурсов о моделировании данных Cassandra.Похоже, вы в основном используете C * для реляционного варианта использования, так что вы захотите разобраться в этом.

0 голосов
/ 28 января 2019

Да, вы правы - вам нужно знать первичный ключ записи, чтобы выполнить обновление данных или удаление определенной записи.Здесь есть несколько вариантов, в зависимости от вашей модели данных:

  1. Выполните полное сканирование таблицы, используя эффективное сканирование диапазона токенов (см. этот ответ для получения более подробной информации);
  2. Если это требуется очень часто, вы можете создать материализованное представление с User.email в качестве ключа раздела и получить все идентификаторы сообщений, которые вы можете обновить (но вам нужно будет сделать это из вашего приложения, естьнет поддержки вложенных запросов в CQL).Но также имейте в виду, что материализованные представления являются «экспериментальной» функцией в Cassandra и могут работать не всегда (это более стабильно в DataStax Enterprise).Кроме того, если у вас есть пользователи с сотнями тысяч электронных писем, это может создать большие разделы.
  3. Сделайте 2-й элемент с вашим кодом, используя дополнительную таблицу
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...