我有一个删除用例较少的 cassandra 集群。我在我的 system.log 中发现“ Read 10 live and 5645464 tombstones cell in keyspace.table ”是什么意思?请帮助理解。
谢谢。
对于 Cassandra,所有记录的信息都是不可变的。这意味着当您进行删除操作时(使用 delete 语句或使用 Time To Live [ TTL
] 子句显式),数据库将添加另一个带有名为 tombstone 的特殊标志的记录。所有这些记录都将保留在数据库中,直到gc_grace_seconds
期限结束;默认值为 10 天。
在您的情况下,引擎发现检索到的大部分记录已被删除,但它们仍在等待 gc_grace_seconds 通过,让压缩回收空间。解决该问题的一种可能选择是减少gc_grace_seconds
该表的数量。
有关更多信息,请参阅Last Pickle 中的这篇文章。
使用 Cassandra 时要记住的另一件重要的事情是,墓碑单元格与删除不直接相关。
当您null
在执行插入时向属性插入值时,Cassandra 在内部将该属性/单元格标记为墓碑。因此,即使您没有发生大量删除操作,您最终也可能会得到大量墓碑。简单而简单的解决方案是在插入时不null
为属性插入值。
根据此语句Read 10 live and 5645464 tombstones cells in keyspace.table
,可能会发生表扫描以进行查询,该查询正在扫描10
单元格和5645464
墓碑数量(具有null
值的单元格),而这样做是我的猜测。需要了解正在执行的查询类型以更深入地了解这一点。