0

我试图了解删除后在 Cassandra 中回收空间的速度有多快。我找到了许多描述墓碑的文章,以及当您进行范围查询时可能产生的问题,Cassandra 必须扫描大量墓碑行以找到更稀缺的活动行。而且我知道您不能将 gc_grace_seconds 设置得太低,否则如果节点脱机并在墓碑从其余机器上消失后又回来,您将弹出僵尸记录。这一切都说得通。

但是,如果将墓碑放置在上,则应该可以回收其余行数据的空间。

所以我的问题是,对于这张桌子:

create table somedata (
  category text,
  id timeuuid,
  data blob,
  primary key ((category), id)
);

如果我在此表中插入然后删除一些记录,并注意不要遇到上述墓碑+范围问题以及其他地方的详细情况,那么这些 blob 的空间何时会被回收?

在我的情况下,blob 可能大于推荐的大小(我相信 1mb),但它们不应该大于 ~15mb,我认为这仍然是可行的。但是,如果所有这些 blob 保留 10 天(默认 gc_grace_seconds 值)与只有键保留 10 天,那么空间差异会很大。

当我查看时,我找不到任何地方描述的这个特定方面。

4

1 回答 1

1

在 gc_grace_seconds 子句完成后,空间将被回收,并且您将有键和 blob 粘在周围。此外,您还需要考虑,如果您还有更新(这将是由创建时间的时间戳标识的同一记录的不同版本)和使用的复制因子(分发的同一记录的副本数量),这可能会增加跨节点)。

您将始终在故障恢复和磁盘使用之间进行权衡,设置的自定义(gc_grace_seconds、ttl、复制因子、一致性级别)将取决于您的用例和您需要满足的 SLA。

于 2016-11-23T18:18:24.717 回答