5

目前,我有一个 cassandra 列族,其中包含大量数据,可以说超过 100,000 行。现在,我想删除此列族中的所有数据,但问题出现了:

删除所有数据后,我在这个列族中执行查找查询,cassandra 需要几十秒才能返回一个空的查询结果。而当原始数据较大时,时间成本会线性增加

它是由删除 cassandra 数据库中的数据时的墓碑功能引起的。在触发下一次 GC 之前,查找速度不会恢复正常。请参阅Cassandra 分布式删除

因为我的系统中经常使用这样的查询操作,所以我无法承受长达几秒钟的巨大延迟。

你能给我一个解决这个问题的方法吗?

4

2 回答 2

3

这听起来像是使用数据库的一种非常糟糕的方式。填充它,清空它,重复。解决问题的一种方法是每次使用不同的 CF 名称,例如当您清空数据并开始重新填充它时,创建一个新的列族并使用它,然后删除另一个列族,但是这是 hacky

我建议使用压缩(摆脱它可以检测到的所有墓碑)来解决你的问题,它是 CPU 密集型的,但它比等待数十秒查询响应要好。您可以通过提供要压缩的特定 ks & cf 来减少计算机上的任务密集度:

./nodetool compact <ks_name> <cf_name>

Ritchard 的观点很好,gc_grace_seconds默认设置为 10 天,因此您可能需要调整它以允许压缩以摆脱墓碑。

于 2013-09-26T08:34:00.790 回答
0

@Fify

如果您的列族经常被修改(读取然后更新然后再次读取更新......),您应该使用分级压缩策略

要更快地删除已删除的列,请更改列族的属性gc_grace_seconds

于 2013-09-26T10:42:55.193 回答