【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
英文地址,請注明出處:http://en.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…