performance - 删除大量数据后,Cassandra 查找查询速度很慢

标签 performance cassandra tombstone

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

删除所有数据后,我在此列族中执行查找查询,cassandra 将花费数十秒返回空查询结果。并且当原始数据较大时时间成本会线性增加

它是由 引起的墓碑特征 同时从 cassandra 数据库中删除数据。直到下一次 GC 被触发,查找速度才会恢复正常。见 Cassandra Distributed Deletes .

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

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

最佳答案

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

我建议使用压缩( gets rid of all the tombstones it can detect )来解决您的问题,它是 CPU 密集型的,但比等待数十秒的查询响应要好。您可以通过提供要压缩的特定 ks & cf 来减少机器上的任务强度:

./nodetool compact <ks_name> <cf_name>

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

关于performance - 删除大量数据后,Cassandra 查找查询速度很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19018947/

相关文章:

sql - 优化 SELECT 查询性能

javascript - 优化 JavaScript 加载的最佳实践

cassandra - 是否有任何配置可以启用在 cassandra datastax java 驱动程序中设置 Double 值的精度?

cassandra - 如何在 cassandra 1.2.6 中生成 'tombstone compaction'

cassandra - Cassandra 的墓碑物理位置

cassandra - 有什么方法可以让 Cassandra *在 * gc_grace_seconds 过去之前安全地移除墓碑?

python - 当被调用者的 cumtimes 加起来不等于函数的总 cumtime 时,这意味着什么?

c++ - 为什么快速整数类型比其他整数类型快?

修复期间 Cassandra 异常

java - 使用 Hector 客户端从 Cassandra 检索多列值