Cassandra删除性能取决于逻辑删除的数量或单元格的数量



我有一个cassandra表定义,如下

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

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

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

生成了不同类型和数量的tombstone。请参阅此处https://stackoverflow.com/a/29301627/1439122

考虑到在最终清理/压实过程中同样数量的行受到影响,压实过程的性能是取决于墓碑的数量和类型,还是仅取决于受到影响的行/单元格的数量?

1是一个范围逻辑删除,2是一个单元格逻辑删除。我可能错了,但我认为对于大多数用例来说,它可以忽略不计。如果colC的值很多,1可能会导致更多的逻辑删除或数据在读取时被丢弃(在jvm上稍微困难一点)。在这两者中,我怀疑如果只有一个colC值,2(稍微)更有效率,但1删除a/b/time分区中的所有colC要好得多。

我猜是"取决于情况"one_answers"可能无关紧要"。

只要您对删除后的读取进行过多的tombstone扫描,就不会对性能产生任何影响。

在大多数情况下,删除分区会给您带来更好的性能,因为您不再关心那个分区了。

使用cell删除,您可以创建片段,这些片段无论如何都不会在gc_grace_conds中消亡。内部碎片会给您的应用程序和Cassandra带来问题。只要考虑一下Cassandra端的GC,它具有内部碎片数据。这就是你最终会遇到的情况。

最新更新