0

我有一个删除用例较少的 cassandra 集群。我在我的 system.log 中发现“ Read 10 live and 5645464 tombstones cell in keyspace.table ”是什么意思?请帮助理解。

谢谢。

4

2 回答 2

2

对于 Cassandra,所有记录的信息都是不可变的。这意味着当您进行删除操作时(使用 delete 语句或使用 Time To Live [ TTL] 子句显式),数据库将添加另一个带有名为 tombstone 的特殊标志的记录。所有这些记录都将保留在数据库中,直到gc_grace_seconds期限结束;默认值为 10 天。

在您的情况下,引擎发现检索到的大部分记录已被删除,但它们仍在等待 gc_grace_seconds 通过,让压缩回收空间。解决该问题的一种可能选择是减少gc_grace_seconds该表的数量。

有关更多信息,请参阅Last Pickle 中的这篇文章

于 2019-05-28T17:50:25.020 回答
1

使用 Cassandra 时要记住的另一件重要的事情是,墓碑单元格与删除不直接相关。

当您null在执行插入时向属性插入值时,Cassandra 在内部将该属性/单元格标记为墓碑。因此,即使您没有发生大量删除操作,您最终也可能会得到大量墓碑。简单而简单的解决方案是在插入时不null为属性插入值。

根据此语句Read 10 live and 5645464 tombstones cells in keyspace.table,可能会发生表扫描以进行查询,该查询正在扫描10单元格和5645464墓碑数量(具有null值的单元格),而这样做是我的猜测。需要了解正在执行的查询类型以更深入地了解这一点。

于 2019-05-29T02:01:49.393 回答