Как обновить поле, которое индексируется?

Я хочу обновить поле в Cassandra, которое индексируется с использованием Phantom Scala SDK, например:

this.update.where(_.id eqs folderId)
      .and(_.owner eqs owner)
      .modify(_.parent setTo parentId)

родительское поле является индексированным полем в таблице. Но операция не разрешена при компиляции кода, там будет исключение при компиляции, например:

[error] C:\User\src\main\scala\com\autodesk\platform\columbus\cassandra\DataItem.scala:161: could not find implicit value for evidence parameter of type com.websudos.phantom.column.ModifiableColumn[T]

Ошибка вызвана обновлением поля, которое индексируется.

Мой обходной путь - удалить запись и вставить новую запись, чтобы "обновить" запись.

Есть ли лучший способ для ситуации?

1 ответ

Решение

Вам не разрешено обновлять поле, являющееся частью первичного ключа, потому что, если вы это сделаете, вы не сможете Cassandra когда-либо заново составить хэш строки, которую вы обновляете.

Читайте здесь для подробностей по теме. По сути, если у вас был HashMap[K, V] что вы пытаетесь сделать, это обновить K, но при этом вы никогда не сможете получить то же самое V снова.

Так что в Кассандре, так же, как в HashMapобновление индекса выполняется с DELETE а потом новый INSERT, Вот почему фантом намеренно не позволяет вам скомпилировать ваш запрос, я написал эти ограничения времени компиляции для конкретных целей предотвращения некорректного CQL.

Другие вопросы по тегам