我的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
鉴于在最终清算/压缩中相同数量的行受到影响,压缩过程的性能是否取决于墓碑的数量和类型或仅受影响的行/单元数?
答案 0 :(得分:1)
1
是一个范围墓碑,2
是一个单元格墓碑。我可能错了,但我认为对于大多数用例来说它可以忽略不计。如果有很多colC值,1
可能会导致更多的墓碑或数据被丢弃(jvm稍微强一些)。我怀疑2
中有两个(稍微)更有效率,如果只有一个colC值但1
更好地删除a / b /时间分区中的所有colC。
我想“它取决于”和“可能无关紧要”。
答案 1 :(得分:0)
只要您通过墓碑扫描过多的删除后读取内容,就不会有任何性能影响。
在大多数情况下,删除分区会为您提供更好的性能,因为您不再关心该分区。
使用单元格删除,您可以创建片段,无论如何都不会为gc_grace_seconds而死。内部碎片会为您的应用程序以及Cassandra带来问题。只需考虑Cassandra方面的GC与内部碎片数据。这就是你最终会得到的结果。