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

Cassandra处理客户端UPDATE查询时何时会读取完整行?

解答

我们以主流采用LSM树架构的数据库(RocksDB、Cassandra等都属于这类)为例说明:

  • memtable仅存储本次变更的delta数据,不需要提前读取完整行
    你执行的update student set name='name_temp' where id in (1, 2);,写入memtable的是两条独立的变更记录:每条仅包含主键id、更新后的name字段值、对应的操作版本号/时间戳,未变更的phone字段不会写入本次记录,整个写入过程完全不需要读旧数据,性能很高。
  • 你对SSTable的认知有一点偏差:flush阶段不会生成完整行
    把memtable刷到磁盘生成SSTable的时候,只是把memtable里的delta数据原样持久化,不会做合并、也不会补齐未更新的字段生成完整行。完整行的生成只在两个场景发生:
    1. 读请求触发:当你查询id=1的行时,数据库会依次扫描memtable、不可变memtable、各层SSTable,把所有命中id=1的变更记录按版本号合并,拼装出最新的完整行返回,这个过程就是常说的「读放大」的来源之一。
    2. 后台Compaction触发:当SSTable文件数量达到阈值后,后台会发起Compaction操作,合并多个SSTable里的记录,同一个主键的多份delta变更会在这个阶段合并,生成最新的完整行(如果配置了保留多版本则会保留多个版本的行数据)写入新的SSTable,旧的无效SSTable会被删除。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 18:42:03