2

我是卡桑德拉的新手。我遇到了执行每个分区删除的情况。删除整个分区会创建墓碑吗?现在空间在删除后没有被释放。

4

3 回答 3

3

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

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

于 2021-01-18T08:01:41.667 回答
1

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

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

于 2021-01-21T06:52:02.930 回答
0

我用相同的分区键删除后插入新数据进行了测试。

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 & nodetool compact,但是第 2 阶段的墓碑没有被驱逐,如 sstablemetadata 所示。删除后执行新插入。我希望 Cassandra 能够针对这种情况进行优化。

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

select * from message_routes where user_id = 1
于 2021-04-01T14:08:53.080 回答