我有一个Cassandra集群,删除用例较少。我在system.log中发现“ 读取keyspace.table中的10个活动的和5645464墓碑单元格”是什么意思?请帮助理解。
谢谢。
答案 0 :(得分:2)
对于Cassandra,记录的所有信息都是不可变的。这意味着,当您执行删除操作(使用delete语句或“生存时间[TTL
]子句明确表示)时,数据库将添加另一个记录,该记录带有名为墓碑的特殊标志。所有这些记录将保留在数据库中,直到gc_grace_seconds
个时期过去为止;默认值为10天。
在您的情况下,引擎发现删除的大多数记录都已删除,但是它们仍在等待gc_grace_seconds通过,以使压缩回收空间。解决该问题的一种可能方法是减少该表的gc_grace_seconds
。
有关更多信息,请参阅《最后的泡菜》中的this article。
答案 1 :(得分:1)
使用Cassandra时要记住的另一件重要事情是,墓碑单元不直接与删除关联。
当您在执行插入操作时将null
值插入属性时,Cassandra在内部将该属性/单元标记为墓碑。因此,即使您没有发生很多删除操作,您最终也可能会拥有大量的墓碑。简便的解决方案是在插入时不为属性插入null
值。
按照Read 10 live and 5645464 tombstones cells in keyspace.table
的声明,可能有一个表扫描查询正在扫描10
单元格和5645464
墓碑数(具有null
的单元格)值),而这正是我的猜测。需要了解正在执行哪种类型的查询,以便对此有更多了解。