本文為您介紹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 INTO作業(先結束) |
|
|
|
|
UPDATE/DELETE作業(先結束) |
|
|
|
|
MERGE小檔案作業(先結束) |
|
|
|
|
綜上所述,衝突報錯規則概括如下:
- INSERT類操作不會因為資料變化而產生衝突報錯。
- UPDATE、DELETE、MERGE小檔案操作會因為目標非分區表或分區資料變化而產生衝突報錯。
說明 需要注意的是,在極端情況下,如果多個作業並發且中繼資料正處於更新階段,可能因中繼資料更新而產生衝突報錯。