2013-05-12 50 views
0

我正在使用具有标准列类型和组合类型键的cassandra列族。 cassandra集群有3个节点,复制因子为3.数据从列族中插入,更新和删除。cassandra列数据出现长时间延迟和不正确的时间戳

例如,可以说柱族的当前状态是

Row X 
column=1:a, value=v1, timestamp=1000 
column=1:b, value=v2, timestamp=1010 
column=2:a, value=v3, timestamp=1020 

许多更新发生在一段时间内其中Row X列可以得到更新,有时新行得到插入或删除。

我正在观察的问题是,假设说与密钥2列:a更新在timestamp=1030值为v4。当我使用cassandra-cli观察数据时,即使在几个小时之后,它也不会显示键2:a。后来,键1:a,1:b被删除,并最终 - 在几个小时后,键2:a出现,但有一个时间戳早于1030 - 比如说990.

我读到,如果有时钟跨节点的差异,那么具有最新时间戳的作者写其他人。如果它们是相同的,那么较高的值将按照字典顺序排列在较低的值上。但是,就我而言,只有一个编写器进程更新了列族,并且编写器仅更新了密钥2:a并且稍后删除了1:a和1:b。所以没有多个作家为同一个关键。作者是多线程的,因此线程触摸各种键,但不是相同的键。

所以我的问题是:

  1. 下,我们能有什么情况下键显示不出来,甚至写发生后很长一段时间?
  2. 什么会导致密钥的时间戳变得混乱?在上面的例子中,2:a应该有1030的时间戳,但是当它最终被看到时显示为990。

有人可以分享一些关于什么可能是错的,或如何解决问题的指针或任何有用的文章来分析问题?

回答

0

卡桑德拉不立即删除数据。列标记为墓碑,稍后将通过压缩删除,这解释了您的滞后几个小时。无论是否已将其标记为逻辑删除,始终将具有最高时间戳的环中的数据选择为正确的值。虽然我无法确定,但节点时间不同步最有可能发生在您的案例中。我强烈建议您在所有机器上安装ntp,等到所有时间都同步后再试一次。