cassandra 斑点、墓碑和 space 回收

cassandra blobs, tombstones and space reclamation

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

但是,如果逻辑删除被放置在 key 上,那么应该可以回收其余行数据中的 space。

所以我的问题是,对于这个 table:

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

如果我在这个 table 中插入然后删除一些记录,并注意不要 运行 进入上述和其他地方详细描述的逻辑删除+范围问题,这些 blob 的 space 何时会被回收?

就我而言,blob 可能大于推荐大小(我相信是 1mb),但它们不应大于 ~15mb,我认为这仍然可行。但是,如果所有这些 blob 都停留 10 天(默认 gc_grace_seconds 值)与仅键停留 10 天相比,它会产生很大的 space 差异。

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

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

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