更新整个Cassandra表的列值的实用解决方法
我知道,由于Cassandra的分布式特性,它无法为整个表更新列值 然而,我有一个要求,我需要这样做。我需要将“enum”列值更新为新值。该“枚举”的所有剩余值应保持不变。此列不是我的主键的一部分 我可以想出两种方法来实现这一目标,但这两种方法似乎都有点复杂,而且都有一些我不想处理的问题: a) 使用java、scala、node或任何语言编写代码,并使用cassandra的驱动程序更新整个Cassandra表的列值的实用解决方法,cassandra,cassandra-3.0,Cassandra,Cassandra 3.0,我知道,由于Cassandra的分布式特性,它无法为整个表更新列值 然而,我有一个要求,我需要这样做。我需要将“enum”列值更新为新值。该“枚举”的所有剩余值应保持不变。此列不是我的主键的一部分 我可以想出两种方法来实现这一目标,但这两种方法似乎都有点复杂,而且都有一些我不想处理的问题: a) 使用java、scala、node或任何语言编写代码,并使用cassandra的驱动程序 从cassandra表中读取流(其中将包括我的主键) 更新要在对象中更新的值 根据主键分别保存每一行 然而,我需
descripe
的结果,否则可能会导致忽略索引的创建,或者不应用最初创建表时未出现的某些更改。它还需要停机时间,同时删除和重新创建表,再加上复制数据的时间,直到达到所需的一致性
还有其他选择吗?有没有办法使用包含我需要更新的字段的物化视图,并以某种方式将其用于更新
我可以使用token()函数进行更新吗?我试过了,但收到一条消息说它不能用在更新的where子句中
还有其他简单而干净的方法来做这些更新吗?最大的问题是更新是否应该是原子的。另外,该列的数据也发生了很大变化。 作为一个选项,您可以创建一个新列并用更新的值填充它。 同时限制受影响分区上的i/o操作。操作完成后,启用ops。
您需要同时跟踪已处理的分区。也有类似的讨论。在这种情况下,有必要设置一个空值。不幸的是,您描述的方法似乎是解决方案……我认为Cassandra不允许使用默认值创建新列。这就是Horia建议将其设置为null的全部原因。无论如何,这对我不起作用,因为我只想用一个可能的值替换一个新值。其余的现有值应保持不变。