13

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

现在出现了一种情况,我们实际上需要写入数据,然后用更多的数据完成它,过一段时间就完成了。它可以由任何一种制造;

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

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

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

4

2 回答 2

13

只有在删除数据或使用 TTL 值时才会创建墓碑。

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

于 2015-06-25T14:51:22.410 回答
3

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

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

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

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

于 2015-06-25T17:01:27.567 回答