微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决Cassandra:删除整个分区会创建墓碑吗?

我是 Cassandra 的新手。我遇到过按分区执行删除的情况。删除整个分区会创建墓碑吗?现在删除后空间没有释放。

解决方法

是的,删除整个分区会创建一种特殊类型的墓碑,它“隐藏”分区中的所有数据。但与其他墓碑一样,它会保留 gc_grace_seconds,然后才收集。

The Last Pickle 中的 great blog post 详细解释了墓碑

,

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

立即释放空间的另一种选择是更改您的数据模型以使用截断/删除。例如,如果您只需要 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,3)

在每个阶段执行后,nodetool flush 和 nodetool compact 但第 2 阶段的墓碑没有被驱逐,如 sstablemetadata 所示。执行删除后新插入。我希望 Cassandra 能够针对此类情况进行优化。

有趣的是,如果删除是频繁的,那么这个墓碑如何影响分区键的选择查询?

select * from message_routes where user_id = 1

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。