全部產品
Search
文件中心

MaxCompute:ACID語義

更新時間:Feb 28, 2024

本文為您介紹MaxCompute在作業並發情況下ACID的語義及Transactional表的ACID語義。

相關術語

  • 操作:指在MaxCompute上提交的單個作業。
  • 資料對象:指持有實際資料的對象,例如非分區表、分區。
  • INTO類作業:指INSERT INTO、DYNAMIC INSERT INTO等包含關鍵字INTO的SQL作業。
  • OVERWRITE類作業:指INSERT OVERWRITE、DYNAMIC INSERT OVERWRITE等包含關鍵字OVERWRITE的SQL作業。
  • Tunnel資料上傳:可以歸結為INTO類或OVERWRITE類作業。

ACID語義描述

  • 原子性(Atomicity):一個操作或是全部完成,或是全部不完成,不會結束在中間某個環節。
  • 一致性(Consistency):從操作開始至結束的期間,資料對象的完整性沒有被破壞。
  • 隔離性(Isolation):操作獨立於其他並行作業完成。
  • 持久性(Durability):操作處理結束後,對資料的修改將永久有效,即使出現系統故障,該修改也不會丟失。

MaxCompute並發寫操作的ACID特性

  • 原子性(Atomicity)
    • 任何時候MaxCompute會保證在衝突時只有一個作業執行成功,其他衝突作業執行失敗。
    • 對於單個表或分區的CREATE、OVERWRITE、DROP操作,可以保證其原子性。
    • 跨表操作時不支援原子性(例如MULTI-INSERT)。
    • 在極端情況下,以下操作可能不保證原子性:
      • DYNAMIC INSERT OVERWRITE多於一萬個分區,不支援原子性。
      • INTO類操作:這類操作失敗的原因是交易回復時資料清理失敗,但不會造成未經處理資料丟失。
  • 一致性(Consistency)
    • OVERWRITE類作業可保證一致性。
    • INTO類作業在衝突失敗後可能存在失敗作業的資料殘留。
  • 隔離性(Isolation)
    • 非INTO類操作保證讀已提交。
    • INTO類操作存在讀未提交的情境。
  • 持久性(Durability)
    • MaxCompute保證資料的持久性。

Transactional表的ACID特性

Transactional表的ACID特性在MaxCompute並發寫操作的ACID特性基礎上,支援如下新特性:
  • INTO類操作保證讀已提交,作業衝突執行失敗後無資料殘留。
  • 對於單個非分區表或單個分區的UPDATE、DELETE、MERGE小檔案操作,可以保證其原子性。

    例如,當兩個UPDATE操作並發修改同一分區時,只會有一個UPDATE操作執行成功。不會存在一個UPDATE操作部分執行成功,也不會存在兩個UPDATE操作分別執行成功的情況。

操作並發衝突說明

當作業並發運行且寫入相同目標表時,可能出現衝突。產生衝突時,先結束的作業會執行成功,後結束的作業可能會因衝突而報錯。

下表為作業並發提交情境下,對同一個非分區表或分區的並行作業先後結束的衝突說明。

作業類型INSERT OVERWRITE/TRUNCATE作業(後結束)INSERT INTO作業(後結束)UPDATE/DELETE作業(後結束)MERGE小檔案作業(後結束)
INSERT OVERWRITE/TRUNCATE作業(先結束)
  • 先、後結束的作業都會執行成功。
  • INSERT OVERWRITE/TRUNCATE作業會覆蓋先結束的INSERT OVERWRITE/TRUNCATE作業的資料。
  • 先、後結束的作業都會執行成功。
  • INSERT INTO作業會在先結束的INSERT OVERWRITE/TRUNCATE作業的資料上追加資料。
  • 後結束的UPDATE/DELETE作業會報錯。
  • 後結束的UPDATE/DELETE作業對應的非分區表或分區被先結束的INSERT OVERWRITE/TRUNCATE作業修改。
  • 後結束的MERGE小檔案作業會報錯。
  • 後結束的MERGE小檔案作業對應的非分區表或分區被先結束的INSERT OVERWRITE/TRUNCATE作業修改。
INSERT INTO作業(先結束)
  • 先、後結束的作業都會執行成功。
  • 後結束的INSERT OVERWRITE/TRUNCATE作業會覆蓋先結束的INSERT INTO作業的資料。
  • 先、後結束的作業都會執行成功。
  • 後結束的INSERT INTO作業會在先結束的INSERT INTO作業的資料上追加資料。
  • 後結束的UPDATE/DELETE作業會報錯。
  • 後結束的UPDATE/DELETE作業對應的非分區表或分區被先結束的INSERT INTO作業修改。
  • 後結束的MERGE小檔案作業會報錯。
  • 後結束的MERGE小檔案作業對應的非分區表或分區被先結束的INSERT INTO作業修改。
UPDATE/DELETE作業(先結束)
  • 先、後結束的作業都會執行成功。
  • 後結束的INSERT OVERWRITE/TRUNCATE作業會覆蓋先結束的UPDATE/DELETE作業的資料。
  • 先、後結束的作業都會執行成功。
  • 後結束的INSERT INTO作業會在先結束的UPDATE/DELETE作業的資料上追加資料。
  • 後結束的UPDATE/DELETE作業會報錯。
  • 後結束的UPDATE/DELETE作業對應的非分區表或分區被先結束的UPDATE/DELETE作業修改。
  • 後結束的MERGE小檔案作業會報錯。
  • 後結束的MERGE小檔案作業對應的非分區表或分區被先結束的INSERT INTO作業修改。
MERGE小檔案作業(先結束)
  • 先、後結束的作業都會執行成功。
  • 後結束的INSERT OVERWRITE/TRUNCATE作業會覆蓋先結束的MERGE小檔案作業的資料。
  • 先、後結束的作業都會執行成功。
  • 後結束的INSERT INTO作業會在先結束的MERGE小檔案作業的資料上追加資料。
  • 後結束的UPDATE/DELETE作業會報錯。
  • 後結束的UPDATE/DELETE作業對應的非分區表或分區被先結束的MERGE小檔案作業修改。
  • 後結束的MERGE小檔案作業會報錯。
  • 後結束的MERGE小檔案作業對應的非分區表或分區被先結束的MERGE小檔案作業修改。
綜上所述,衝突報錯規則概括如下:
  • INSERT類操作不會因為資料變化而產生衝突報錯。
  • UPDATE、DELETE、MERGE小檔案操作會因為目標非分區表或分區資料變化而產生衝突報錯。
說明 需要注意的是,在極端情況下,如果多個作業並發且中繼資料正處於更新階段,可能因中繼資料更新而產生衝突報錯。