2

我想更新 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]

该错误是由更新索引的字段引起的。

我的解决方法是删除记录并插入新记录以“更新”记录。

有没有更好的方法来应对这种情况?

4

1 回答 1

2

不允许更新作为主键一部分的字段,因为如果这样做,Cassandra 将无法重新组合正在更新的行的哈希值。

阅读此处了解有关该主题的详细信息。从本质上讲,如果你有一个HashMap[K, V]你想要做的就是更新K,但这样做你将永远无法V再次检索相同的内容。

HashMap所以在Cassandra中,就像DELETEINSERT. 这就是为什么 phantom 故意阻止你编译查询的原因,我写了这些编译时间限制是为了防止无效的 CQL。

于 2015-06-11T10:54:09.593 回答