Cassandra删除性能取决于墓碑数量还是细胞数量?

时间:2015-03-31 08:28:26

标签: cassandra cassandra-2.0

我的cassandra表定义如下

CREATE TABLE mytable
(
  colA text,
  colB text,
  timeCol timestamp,
  colC text,
  PRIMARY KEY ((colA, colB, timeCol), colC)
) WITH....

当我使用2个不同的查询删除时:

1. delete from mytable where colA = '...' AND colB = '...' and timeCol = 111
2. delete from mytable where colA = '...' AND colB = '...' and timeCol = 111 AND colC = '...'

生成不同类型和数量的墓碑。请参考这里     https://stackoverflow.com/a/29301627/1439122

鉴于在最终清算/压缩中相同数量的行受到影响,压缩过程的性能是否取决于墓碑的数量和类型或仅受影响的行/单元数?

2 个答案:

答案 0 :(得分:1)

1是一个范围墓碑,2是一个单元格墓碑。我可能错了,但我认为对于大多数用例来说它可以忽略不计。如果有很多colC值,1可能会导致更多的墓碑或数据被丢弃(jvm稍微强一些)。我怀疑2中有两个(稍微)更有效率,如果只有一个colC值但1更好地删除a / b /时间分区中的所有colC。

我想“它取决于”和“可能无关紧要”。

答案 1 :(得分:0)

只要您通过墓碑扫描过多的删除后读取内容,就不会有任何性能影响。

在大多数情况下,删除分区会为您提供更好的性能,因为您不再关心该分区。

使用单元格删除,您可以创建片段,无论如何都不会为gc_grace_seconds而死。内部碎片会为您的应用程序以及Cassandra带来问题。只需考虑Cassandra方面的GC与内部碎片数据。这就是你最终会得到的结果。