我试图了解删除后Cassandra的空间回收速度有多快。我发现了一些描述墓碑的文章以及当你进行范围查询时可能产生的问题,而Cassandra必须扫描大量的逻辑删除行才能找到更稀缺的实时行。而且我知道你不能将gc_grace_seconds设置得太低,否则你会有一个僵尸记录,如果一个节点脱机就会弹出,并在墓碑从其余的机器上消失后返回。这一切都有道理。
但是,如果墓碑放在键上,则应该可以回收剩余行数据的空间。
所以我的问题是,对于这个表:
create table somedata (
category text,
id timeuuid,
data blob,
primary key ((category), id)
);
如果我插入然后删除此表中的一些记录,并注意不要碰到上面描述的墓碑+范围问题,并在其他地方详细说明,那么这些blob的空间何时会被回收?
在我的情况下,斑点可能大于建议的大小(我相信1mb)但是它们不应该大于〜15mb,我认为这仍然是可行的。但如果所有这些斑点都持续10天(默认为gc_grace_seconds值),那么它就会产生很大的空间差异,而只有键才会持续10天。
当我看时,我无法在任何地方找到这个特定的方面。
答案 0 :(得分:1)
在gc_grace_seconds子句完成后,将回收该空间,并且您将拥有键和blob。此外,如果您还有更新(通过创建时间的时间戳确定的相同记录的不同版本)和使用的复制因子(相同的副本数量),您还需要考虑这种情况可能会增加记录分布在节点上。)
您将始终在故障恢复和磁盘使用之间进行权衡,您的设置自定义(gc_grace_seconds,ttl,复制因子,一致性级别)将取决于您的用例和您需要的SLA履行。