Cassandra:删除整个分区会创建tombstone吗?



我刚认识Cassandra。我遇到过这样的情况,每个分区都要执行删除操作。删除整个分区是否会创建墓碑?现在删除后空间没有被释放。

是的,删除整个分区会创建一个特殊类型的"阴影"墓碑。分区中的所有数据。但是像其他墓碑一样,它被保存gc_grace_seconds,并且只在此之后被收集。

the Last Pickle有一篇很棒的博客文章详细解释了墓碑

如前所述,您可以将gc_grace_seconds更新为0,但我不建议这样做,除非您的集群中只有一个节点或您的RF=1。您可以尝试将GC宽限期减少到您可以接受的时间。我想把我认为Cassandra节点可以保持down的最长时间。

立即释放空间的另一个选择是将数据模型更改为使用truncate/drop。例如,如果你只需要24小时的数据,你可以每天创建一个表,并在某个时候删除你不需要的表。

我做了一个测试,用相同的分区键删除后插入新的数据。

create table message_routes (
user_id bigint,
route_id bigint,
primary key ((user_id), service_id)
)
  1. insert into message_routes (user_id, route_id) values (1, 2)

  2. delete from message_routes where user_id = 1

  3. insert info message_routes (user_Id, route_id) values (1, 3)

每级执行后nodetool flush &节点工具紧凑,但是阶段2的墓碑没有被清除,如sstablemetadata所示。删除执行后,新的插入。我希望Cassandra对这种情况有优化。

这是有趣的墓碑如何影响选择查询分区键如果删除将是频繁的?
select * from message_routes where user_id = 1

相关内容

  • 没有找到相关文章

最新更新