为什么墓碑会影响读取性能而不影响更新?

Why do Tombstones affect read performance but not updates?

从我读到的文章中,他们说墓碑会影响 Cassandra 中的读取性能。我正在阅读如何在 Cassandra 中更新数据,看起来数据是用时间戳写入的,而无需修改或读取当前数据。

那么在compaction完成之前执行读取时,需要进行过滤以获取最新值吗?如果是这样的话,墓碑不是一回事吗?为什么它们会对性能产生负面影响,但不会对行进行更新?

在Cassandra中,update是一个mutation,就像insert和delete一样,除了LWTs的用例和一些list操作,所有的mutation都只是附加到memtable/commit log,而不读取磁盘上的数据。所以它们非常快 - 不执行任何检查。

读取操作,与之相反,需要从disk/memtable中获取数据的所有版本,然后根据时间戳创建数据的实际版本。而对于墓碑,我们需要将它们保存在内存中,因为我们可能会从磁盘读取一些数据,这些数据可能具有较旧的时间戳,我们需要检测到这一点。