3

我们有一个由两个节点组成的 cassandra(简单)集群。

在从定制转储恢复期间,我们发现当我们有类似的行时

del column_family['row_1'];
set column_family['row_1']['column1'] = '123';
set column_family['row_1']['column2'] = '456';
set column_family['row_1']['column3'] = '789';

...通常第一列(column_1)没有设置。

我们用了 :

$ cassandra-cli -h cassandra.host.name -k keyspace_name -f dump_file

我们在 Debian 主机上使用 cassandra 1.0.10。

转储总是丢弃然后重新创建键空间,所以当我们执行它时它实际上是空的。我们知道删除语句实际上是不需要的。

我们删除了它,但我们仍然无法理解为什么会发生这种情况。我想这是由设计上的这种方式引起的,我们只是错过了,但我们无法弄清楚到底是什么“错误”。

4

1 回答 1

3

我猜这里发生的事情是行墓碑的时间戳(来自行删除)和一个或多个列写入最终具有相同的值。Cassandra-cli 遵循使用毫秒作为时间戳值的通用约定,因此当删除和插入立即相互跟随时,这是很有可能的。

当插入的列和墓碑具有相同的时间戳时,墓碑获胜。因此,您的第一列似乎会消失是有道理的。

在您的情况下,可以通过使用显式时间戳编写删除,然后使用该时间戳加一编写其他列来解决问题。这种事情通常不是必需的,但请记住,这些写入是为了使它们中的每一个都可以转到不同的 Cassandra 节点,而用户仍然能够随时获得正确的结果。时间戳是冲突解决机制。

于 2012-05-09T18:58:10.060 回答