【StarRocks系列】Update语句

目录

简要流程

详细流程

1. UPDATE 语句执行流程

2. 如何更新表的数据

3. 是否支持事务

总结关键点


简要流程

  1. 前端处理(FE)
    • 解析 SQL 并验证主键条件
    • 生成包含主键列表和新值的更新计划
    • 按主键哈希分发到对应 BE
  1. 后端执行(BE核心流程)
    • 通过主键索引快速定位数据位置
    • 采用"读-改-写"模式(非就地更新)
    • 对同一主键的多版本数据保留最新值

  1. 提交与清理
    • 元数据原子切换确保查询一致性
    • 异步 Compaction 回收旧数据空间
    • 写时复制(Copy-on-Write)机制保证读稳定性

详细流程

StarRocks 的 UPDATE 语句是其 异步主键更新模型 的核心功能(自 2.3 版本引入,并持续优化),专为高效处理按主键进行批量更新的场景设计。其实现与传统的 OLTP 数据库有显著区别,充分利用了列式存储和 MPP 架构的优势。下面详细介绍你关心的三个方面:

1. UPDATE 语句执行流程

StarRocks 的 UPDATE 操作是一个异步、批处理的过程,主要发生在后台的 BE(Backend)节点上,大致流程如下:

  1. 用户提交 UPDATE 语句:
    • 用户通过 MySQL 客户端或其他兼容工具向 FE(Frontend)提交标准的 SQL UPDATE 语句。
    • 示例:UPDATE table_name SET column1 = value1 [, column2 = value2 ...] WHERE pk_column = some_value [AND ...];
  1. FE 解析与计划生成:
    • FE 解析 SQL,验证语法、权限、目标表和列是否存在、WHERE 条件是否包含完整主键(或其等价条件)。
    • FE 生成一个逻辑更新计划。这个计划主要包含两部分信息:
      • 需要更新的行定位信息: 基于 WHERE 条件(必须能精确定位到主键)计算出哪些主键值对应的行需要被修改。
      • 新的列值: 指定的 SET 子句中的新值。
  1. 数据分发到 BE:
    • FE 将逻辑更新计划(主要是主键列表和对应的新值集合)分发给存储了相关数据分片的 BE 节点。
    • 分发策略基于主键的哈希值,确保包含特定主键行的 Tablet(数据分片)所在的 BE 收到该行的更新请求。
  1. BE 执行更新操作(核心 - 读改写):
    • 每个 BE 收到属于自己 Tablet 的更新任务后,执行以下关键步骤:
      • a. 定位数据文件: 利用主键索引快速定位包含目标主键行的数据文件(Segment 文件)。主键索引是存储在内存中的。
      • b. 读取原始行: 读取包含目标行的整个 Segment 文件(或相关的行组)。
      • c. 应用更新: 在内存中,根据 UPDATE 语句的 SET 子句,修改读取到的目标行的对应列值。
      • d. 排序与去重: 对这批更新后的行(可能包含同一主键的多次更新)按主键排序,并只保留最新版本(基于操作序列号或时间戳)。这是保证主键唯一性和最终一致性的关键。
      • e. 写入新文件: 将排序去重后的这批更新行(连同该 Segment 中未修改的行)写入一个新的 Segment 文件。原始文件不会被就地修改
      • f. 提交元数据: 向 FE 报告新生成的 Segment 文件信息,并更新元数据(如版本号)。
  1. 垃圾回收(Compaction):
    • 新 Segment 文件写入成功后,旧的 Segment 文件(包含被更新行原始数据)会被标记为可删除。
    • 后台的 Compaction 进程(Base Compaction 或 Cumulative Compaction)会异步地将包含多个版本数据的 Segment 文件合并压缩,物理删除被覆盖的旧数据行,回收存储空间。

2. 如何更新表的数据

  • 基于主键: UPDATE 必须指定完整的主键或能等价推导出主键的 WHERE 条件(例如 WHERE primary_key_col = ?)。这是 StarRocks 高效定位数据的基础。
  • 列式更新: 在 SET 子句中指定需要更新的列及其新值。未指定的列保持不变。
  • “读-改-写”模式: 核心机制是读取包含目标行的原始数据块 -> 在内存中修改目标列 -> 将修改后的整行(连同该块中未修改的行)写入新文件。不是直接在原存储位置修改位图或单个值。
  • 批量处理: 一次 UPDATE 操作通常涉及一批行的更新(即使 SQL 看起来只更新一行,内部也可能批量处理)。BE 在内存中处理一批更新,排序去重后一次性写入新文件,效率远高于单行更新。
  • 写时复制 (Copy-on-Write): 更新操作通过创建包含新数据的新文件(Segment)来实现,原始文件保持不变直到被异步回收。这保证了高并发读操作的稳定性(读操作总是访问旧的、一致的文件版本,直到新版本提交)。
  • 原子性与版本化: 新 Segment 文件的写入和元数据的更新(版本切换)是原子的。查询在某个时间点看到的总是某个一致的数据版本。

3. 是否支持事务

StarRocks 的 UPDATE 语句在单个语句级别提供原子性持久性

  • 原子性 (Atomicity per Statement):
    • 单行更新: 对一个主键行的所有列更新是原子的。要么所有指定列都更新成功,要么都不更新。
    • 多行更新: 同一批处理内更新的多行操作也具有原子性。这意味着在 BE 处理一批更新时,这批中的所有行更新要么全部成功写入新 Segment 并提交(元数据更新),要么全部失败(例如 BE 崩溃)。用户不会看到部分更新的状态。
  • 隔离性 (Isolation):
    • StarRocks 使用 MVCC (多版本并发控制)。UPDATE 操作创建数据的新版本。
    • 正在进行的 UPDATE 操作不会阻塞读操作。读操作(如 SELECT)会读取操作开始时已提交的最新版本数据(快照隔离),看不到正在进行的 UPDATE 产生的中间状态或未提交的新版本。
    • 多个并发的 UPDATE 操作修改同一主键行时,基于操作序列号或时间戳,只有最后一个成功的 UPDATE 会生效(最终一致性)。在 BE 处理阶段,排序去重步骤保证了这一点。用户可能会看到基于主键的“最后写入获胜”行为。
  • 持久性 (Durability): 一旦 UPDATE 操作成功提交(元数据更新完成),数据就持久化写入磁盘。即使发生节点故障,已提交的数据也不会丢失。
  • 多语句事务:
    • 社区版: 不支持 跨多个 SQL 语句(如 BEGIN; UPDATE ...; UPDATE ...; COMMIT;)的 ACID 事务。每个 UPDATE 语句是独立提交的。
    • 企业版: 支持 有限的多语句事务 (自 3.0 版本引入)。在一个显式的 BEGIN/COMMIT/ROLLBACK 块内执行的多个 DML 语句(INSERT, UPDATE, DELETE)可以作为一个原子操作提交或回滚。这是通过 FE 协调和内存队列实现的,但有容量和超时限制,主要用于小批量、短时操作。它不是传统 OLTP 数据库那种支持长时间运行、大事务的强事务模型。

总结关键点

  • 流程: 解析 -> 定位主键 -> 分发 -> (BE)读原始数据 -> 改内存数据 -> 排序去重 -> 写新文件 -> 提交元数据 -> 异步回收旧文件。
  • 更新机制: 基于主键批量处理,读-改-写模式,写时复制(创建新文件),利用主键索引排序去重保证效率与主键唯一性。
  • 事务: 单条 UPDATE 语句具有原子性和持久性,通过 MVCC 提供快照隔离级别的读一致性。社区版不支持多语句事务,企业版提供有限的多语句事务支持。

理解 StarRocks 的 UPDATE 是面向分析场景优化的、基于主键的异步批量更新机制,而非 OLTP 式的逐行实时更新,对于正确使用和性能调优至关重要。它非常适合数据修正、缓慢变化维度(SCD Type 1/2)、标签更新等场景。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/85615.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/85615.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机三级Linux应用与开发

第 1 章 计算机体系结构与操作系统 1.1 计算科学与计算机系统 冯诺依曼体系的结构要点: 计算机数制采用二进制,程序指令和数据统一存储,计算机应按照程序顺序执行。按照冯诺依曼结构设计的计算机由 控制器,运算器,存…

Web攻防-XSS跨站Cookie盗取数据包提交网络钓鱼BEEF项目XSS平台危害利用

知识点: 1、Web攻防-XSS跨站-手工代码&框架工具&在线平台 2、Web攻防-XSS跨站-Cookie盗取&数据提交&网络钓鱼 演示案例-WEB攻防-XSS跨站-Cookie盗取&数据提交&网络钓鱼&Beef工具 1、XSS跨站-攻击利用-凭据盗取 条件:无防…

自力更生式养老VS三大新型养老:在时代裂变中重构银发生存法则

在岁月长河中,父母曾为子女遮风挡雨,当他们步入暮年,养老问题成为家庭与社会共同关注的焦点。 “父母的养老终究是自力更生”,这句话道出了养老的本质内核。 然而,在自力更生的基础上,选择合适的养老方式…

计算机网络学习笔记:Wireshark观察TCP通信

文章目录 前言一、前置准备二、三报文握手过程抓包2.1、第一次握手2.2、第二次握手2.3、第三次握手 三、通信过程抓包3.1、报文 44379 – 客户端发数据(PSH, ACK)3.2、 报文 44380 – 服务端确认收到数据(ACK)3.3、报文 44469 – …

在Linux中,Iptables能做什么?

概述 背景说明 在运维工作中,Iptables是一个不可或缺的工具,它提供了强大的网络流量控制和管理能力。 问题呈现 iptables是一个不可获取的工具,你对其了解多少?该工具你是否真的会用?详细功能对应的应用场景你是否…

Linux——linux的基本命令

目录 一、linux的目录结构 二、绝对路径和相对路径 三、文件类型(linux下所有东西都可看作文件) 四、文件的权限 五、文件权限的修改(chmod) 六、linux常用的命令 七、文件查看命令 八、文件编辑命令 九、文件压缩与解压…

智慧水利数字孪生解决方案:百川孪生智领千行,100+标杆案例赋能智慧水利全域升级

在数字技术革命与产业变革深度交织的浪潮下,智慧水利作为保障国家水安全、推动水利高质量发展的核心载体,正以数字孪生技术为引擎,驱动水利行业从“经验驱动”向“数据驱动”转型。 山东融谷作为智慧水利数字孪生领域的创新实践者&#xff0c…

深入解析ID3算法:信息熵驱动的决策树构建基石

本文来自「大千AI助手」技术实战系列,专注用真话讲技术,拒绝过度包装。 ID3(Iterative Dichotomiser 3) 是机器学习史上的里程碑算法,由Ross Quinlan于1986年提出。它首次将信息论引入决策树构建,奠定了现代…

Java解析audio时长

前提需要电脑上先安装后ffmpeg public long parseDuration(String audioPath) {long durationMs -1;try {Process process Runtime.getRuntime().exec("ffprobe " audioPath);// InputStream is process.getInputStream();InputStream is process.getErrorStrea…

python学智能算法(十五)|机器学习朴素贝叶斯方法进阶-CountVectorizer多文本处理

【1】引言 前序学习进程中,已经学习CountVectorizer文本处理的简单技巧,先相关文章链接为: python学智能算法(十四)|机器学习朴素贝叶斯方法进阶-CountVectorizer文本处理简单测试-CSDN博客 此次继续深入&#xff0…

AiPy 监控视频智能监察:人像一键抽取+可反复执行程序落地

兄弟们,不知道你们有没有过查监控的经历,虽然现在监控摄像头是越来越多,硬盘越塞越满,但真出了事儿,回放查录像堪比大海捞针!纯人工一帧帧的去找,能把眼睛盯瞎还是人影都找不到。不过我最近搞了…

期货反向跟单-终止盘手合作原则(二)

在期货反向跟单的领域中,数据就是实打实的真金白银,是策略能否持续盈利的核心价值所在。然而,许多团队在实际运营过程中,都遭遇了相似的困境:期初策略运转良好,可随着时间推移,数据表现却每况愈…

【Unity】MiniGame编辑器小游戏(三)马赛克【Mosaic】

更新日期:2025年6月17日。 项目源码:后续章节发布 索引 马赛克【Mosaic】一、游戏最终效果二、玩法简介三、正式开始1.定义游戏窗口类2.规划游戏窗口、视口区域3.地图方块阵列①.定义方块结构体②.生成方块阵列③.计算九宫格黑色方块数量④.排除任意九宫…

基于深度学习的智能图像质量评估系统:技术与实践

前言 在数字图像处理和计算机视觉领域,图像质量评估(Image Quality Assessment, IQA)是一个重要的研究方向。图像质量评估的目标是通过算法自动评估图像的质量,包括清晰度、对比度、噪声水平等。传统的图像质量评估方法主要依赖于…

【Golang面试题】Go语言实现请求频率限制

Go语言实现请求频率限制:从计数器到令牌桶的完整指南 在实际开发中,接口被恶意刷请求是常见问题。本文将深入探讨Go语言中四种主流的请求限流方案,从简单到复杂逐步深入,助你构建高可用服务。 一、基础方案:计数器法…

11Labs 增长负责人分享:企业级市场将从消费级或开发者切入丨Voice Agent 学习笔记

本文摘自 Founder Park AI 产品如何做增长,ElevenLabs的案例很值得学习。 专注于 AI 语音生成的独角兽企业 ElevenLabs 可以说一直在高速增长。在今年 1 月完成 1.8 亿美元 C 轮融资后,ElevenLabs 的估值突破 30 亿,直指 33 亿美元。2024 年…

Linux 命令:grep

概述 在Linux系统里,grep是一款十分实用的命令行工具,它主要用于在文件或者输入流中搜索符合特定模式的文本。下面为你详细介绍它的用法。资料已经分类整理好:https://pan.quark.cn/s/26d73f7dd8a7 基本语法 grep [选项] 搜索模式 [文件..…

Java八股文——MySQL「架构篇」

MySQL主从复制了解吗 面试官您好,我了解MySQL的主从复制。它是构建高可用、高可扩展数据库架构的核心基石。 1. 主从复制的核心原理与流程 整个主从复制的过程,就是一场围绕 binlog(二进制日志) 的“接力赛”。这个过程主要可以…

ubuntu下python版本升级导致pyqt不能正常运行解决

最终解决方案 ubuntu下多python版本pyqt兼容性问题解决 python3.9 -m pip install --upgrade --force-reinstall --prefer-binary pyqt5)尝试解决方案一(失败) 系统默认python版本可以,其他版本不行 sudo apt install pyqt5-dev-tools尝试解决方案二(失败) 一直…

AIGC工具平台-VideoRetalking音频对口型数字人

唇形合成技术正逐渐成为AIGC内容生产领域的重要工具,能够实现音视频数据的高度融合。基于VideoRetalking模块的可视化界面降低了技术门槛,使非技术背景的用户也能便捷体验唇形驱动数字人合成的流程。 本文重点解析该模块的使用方式及开发流程&#xff0…