检查行是否被删除

时间:2014-05-22 10:56:32

标签: java cassandra cassandra-2.0

我目前正在开发cassandra source(2.0.4),我想知道如何使用ColumnFamily类中的方法isMarkedForDelete()。如果我用键插入一行,则该方法返回false,如果我删除该行,则返回true。这就是我期望的方式;-)但是,这就是我想知道的问题,如果我再次使用相同的密钥插入一行,该方法仍会返回false,尽管该行未被删除(因为它是一个具有相同键的新行)。如果删除并重新插入的行似乎总是保留该标志(如果它在过去被删除过一次)。如何可靠地确定是否删除了行? 提前谢谢!

1 个答案:

答案 0 :(得分:6)

删除是Cassandra是通过编写一个称为墓碑的新行来完成的。逻辑删除将确保在任何查询中都不返回该行(一个逻辑删除已在所有节点上达到完全一致)。

当满足以下条件时,实际上会从SSTable中删除该行:

  1. 发生压实
  2. 逻辑删除记录早于表格的gc_grace_seconds(默认为10天)
  3. 使用已存在的键插入行不会导致错误,因为Cassandra中的数据结构与Java Map非常相似。 "把"具有相同键的行只会覆盖插入的列值,并且会成功。

    确定行是否已被删除的最佳方法是查询该行并确保它不会在查询中返回。

    我不确定您使用的是哪个客户端,但使用C * 2.0时,您应该使用DataStax Java驱动程序(当前版本为2.0.2)。