Cassandra 更新过程澄清

Posted

技术标签:

【中文标题】Cassandra 更新过程澄清【英文标题】:Cassandra update process clarify 【发布时间】:2020-07-12 10:49:23 【问题描述】:

当我们执行读取查询时,如果它为真,它将从 SStable 中检索数据。 那么,如果我在压缩发生之前检索最后更新的数据会发生什么? 换句话说,Cassandra 做了什么来检索 memtable 中而不是 SStable 中的数据?

【问题讨论】:

【参考方案1】:

这是 Cassandra 读取路径的示意图。

有些进程会同时检查 RAM 和磁盘上的请求数据。当从多个路径中找到数据时,会对其进行协调(以确保最新的时间戳)并返回。

所以回答你的问题,当请求的数据不存在于 SSTable 中时,可以返回 memtable 的结果。

【讨论】:

为什么 Cassandra 检查这两个表?一旦在 memtable 中找到数据,这是最新的时间戳。那么为什么它也检查 sstable 呢?如果在 memtable 中没有找到数据,它将检查 sstable 是否合理。 时间戳可以在查询中显式设置,或者旧数据可能会迟到,因此 memtable 中的数据可能比磁盘上的数据“旧”。

以上是关于Cassandra 更新过程澄清的主要内容,如果未能解决你的问题,请参考以下文章

Cassandra 在一些插入/更新后给出 TTransportException

Cassandra 数据如何更新

关于Cassandra的错误观点

如何在 Cassandra 中使用“LIKE”子句

Cassandra 如何处理并发更新?

Cassandra 更新无法正常工作