Как обновить поле, которое индексируется?
Я хочу обновить поле в 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.