我从单行读取数据时遇到Cassandra v1.2.5性能下降,其中只有少数列或零列,但之前添加和删除了许多不同的列。
要测试我会执行以下操作:
因此,读数变得比我添加和删除500000列之前慢了约70倍。
尝试紧凑,齐平,修复 - 没有任何帮助。速度有点提高到208.7毫秒
唯一有助于恢复读取性能的是完全删除行。 写入和读取其他行仍然很快。
为什么这会降低读取速度?以及如何解决?
答案 0 :(得分:2)
退化是因为墓碑。 Cassandra不能只删除列,因为如果副本没有收到删除,那么当该节点重新联机时,列将重新出现。出于这个原因,Cassandra将删除存储为墓碑,这些墓碑就像值一样,但带有标记,表示列已被删除。
在gc_grace_seconds之后删除墓碑。到这个时候,假设所有副本都会看到删除,因此可以安全地删除墓碑。默认值为10天。你可以控制它(按列系列) - 如果在你的用例中你删除了一致性级别ALL,或者恢复生命的列并不重要,你甚至可以将它降低到0。
或者,如果要删除整行,可以执行行删除而不是删除单个列。这会插入一个行逻辑删除,在压缩之后,意味着读取该行应该与从未插入现在已删除的列一样快。