You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Cassandra同主键多节点并发插入的WriteTime及一致性级别影响问询

Cassandra一致性级别对WriteTime的影响及写入行为解析

一、集群内部的写入过程

Cassandra的写入是基于单元格的追加式写入,不存在“直接跳过状态A写入状态B”的情况:

  • 执行插入A时,会在对应副本节点的SSTable中持久化三个单元格的版本:field_2=1(WriteTime为A的操作时间)、field_3=1(WriteTime为A的操作时间),以及主键field_1=1。
  • 执行插入B时,由于语句中显式指定了field_2=1(即使值和A一致),Cassandra会将其视为一次新的写入,在SSTable中追加field_2=1(WriteTime为B的操作时间)、field_3=2(WriteTime为B的操作时间)的新版本。
  • 查询时,Cassandra会合并所有SSTable中的单元格版本,取每个字段最大WriteTime对应的版本作为结果,因此最终返回的是B操作写入的版本。

二、WriteTime相同的原因

你看到unchanged_cell和updated_cell的WriteTime相同,是因为B操作显式包含了field_2字段——只要INSERT语句中指定了某个字段,无论值是否变化,Cassandra都会为该字段生成一个新的单元格版本,并赋予当前操作的WriteTime,而非保留之前的版本时间。

三、一致性级别的影响

一致性级别(ONE/QUORUM/ALL)不会改变WriteTime的生成逻辑,它仅控制:

  • 写入操作需要等待多少个副本节点确认持久化完成后,才向客户端返回成功。
  • 查询操作需要从多少个副本节点拉取数据,才能合并出最终结果。

无论使用哪种一致性级别,只要INSERT语句包含了field_2,它的WriteTime都会被更新为B操作的时间,因此结果不会变化。

四、实现预期结果的方法

如果希望field_2保留A操作的WriteTime,执行B操作时不要包含field_2字段,仅更新需要修改的field_3:

INSERT INTO table1(field_1, field_3) VALUES (1, 2); -- B操作

此时查询WRITETIME(field_2)会得到A操作的时间,WRITETIME(field_3)得到B操作的时间,两者会出现预期的大小差异。


内容的提问来源于stack exchange,提问作者Ewen Bouquet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 20:12:41