目前,我有一个cassandra列系列,包含大量数据,超过100,000个。现在,我想删除此列族中的所有数据,问题出现了:
删除所有数据后,我在此列族中执行查询查询,cassandra将花费数十秒来返回空查询结果。当原始数据较大时,时间成本将线性增加
从cassandra数据库中删除数据时,它是由逻辑删除功能引起的。在下一个GC被触发之前,查找速度将无法恢复正常。见Cassandra Distributed Deletes。
由于此类查询操作经常在我的系统中使用,因此我无法承受长达几秒的巨大延迟。
请你帮我解决这个问题?
答案 0 :(得分:3)
这听起来像是使用数据库的一种非常糟糕的方式。填充它,清空它,重复。解决问题的一种方法是每次使用不同的CF名称,例如在清空数据并开始重新填充数据时,创建一个新的列族并使用它,然后删除另一个colum系列然而这是hacky
我建议使用压缩(gets rid of all the tombstones it can detect)来解决您的问题,它是CPU密集型的,但它比等待几十秒的查询响应要好。您可以通过提供特定的ks& amp; amp; cf你想紧凑:
./nodetool compact <ks_name> <cf_name>
Ritchard的观点很好,默认情况下gc_grace_seconds设置为10天,所以你可能需要调整它以允许压缩以消除墓碑。
答案 1 :(得分:0)
@Fify
如果您的列系列经常修改(阅读然后更新然后再次阅读更新...),您应该使用 leveled compaction strategy
要更快删除已删除的列,请更改列族的 gc_grace_seconds 属性