我是新来卡桑德拉的。我遇到了按分区执行删除的情况。删除整个分区是否会创建tombstones?现在删除后空间不会被释放。
发布于 2021-01-18 16:01:42
是的,删除整个分区会创建一种特殊类型的墓碑,它会“隐藏”分区中的所有数据。但像其他墓碑一样,它是为gc_grace_seconds保留的,只有在那之后才会收集。
在the Last Pickle中有一个great blog post,它详细地解释了墓碑
发布于 2021-01-21 14:52:03
如前所述,您可以将gc_grace_seconds更新为0,但我不建议这样做,除非您的集群中只有一个节点或您的RF=1,您可以尝试将GC宽限期减少到您可以接受的时间。我想把我认为Cassandra节点可以停用的最大时间。
立即释放空间的另一个选择是将您的数据模型更改为使用truncate/drop。例如,如果您只需要24小时的数据,那么您可以每天创建一个表,然后在某个时候删除不需要的表。
发布于 2021-04-01 22:08:53
我测试了用相同的分区键删除后插入新数据。
create table message_routes (
user_id bigint,
route_id bigint,
primary key ((user_id), service_id)
)insert into message_routes (user_id, route_id) values (1, 2)delete from message_routes where user_id = 1insert info message_routes (user_Id, route_id) values (1, 3)在执行每个阶段之后,nodetool flush & nodetool compact,但是来自阶段2的tombstone没有被逐出,如sstablemetadata所示。在执行delete之后,new insert。我希望Cassandra有针对这种情况的优化。
有趣的是,如果频繁删除,这个墓碑会如何影响分区键的select查询?
select * from message_routes where user_id = 1https://stackoverflow.com/questions/65770101
复制相似问题