用INSERT覆盖cassandra中的行,会导致墓碑吗?

Overwrite row in cassandra with INSERT, will it cause tombstone?

在我们的案例中,由于数据量和速度,将数据写入 Cassandra 而不会导致其创建逻辑删除至关重要。目前我们只写了一次行,然后再也不需要更新行了,只需要重新获取数据。

现在出现过这样一种情况,我们其实是要写数据,然后再用更多的数据来完成,过一段时间就完成了。 两者都可以制作;

  1. 使用 INSERT 再次覆盖一行中的所有数据(所有数据都可用),或

  2. 仅对新数据执行更新。

最好的方法是什么,记住速度并且不创建墓碑很重要?

逻辑删除只会在删除数据或使用 TTL 值时创建。

Cassandra 与您描述的用例非常吻合。增量添加数据将适用于 INSERT 和 UPDATE 语句。 Cassandra 会将数据存储在不同的位置,以防随着时间的推移为同一分区键添加数据。定期 运行 压缩将再次合并数据以获得单个键以优化访问和释放磁盘 space。这将根据写入值的时间戳发生,但不会创建任何新的墓碑。 您可以了解有关 Cassandra 如何存储数据的更多信息,例如here.

进行更新以添加新的或更改的数据会更有效率。没有必要重写不变的旧数据,让 Cassandra 重写它是低效的。

当您进行插入或更新时,Cassandra 会为每一列的修改时间保留一个时间戳。当您进行读取时,Cassandra 会根据一致性设置从内存、磁盘和其他副本中收集该键的所有写入。然后它将合并列数据,以便为每一列使用最新值。

当数据在磁盘上压缩时,如果一行的不同列有单独的更新,这些将合并为压缩数据中的一行。

除非您使用更新来设置 TTL(生存时间)值,否则您无需担心通过更新创建逻辑删除。在您的应用程序中,听起来好像您从不删除数据,因此您永远不会有任何墓碑。