本文為您介紹MaxCompute在作業(yè)并發(fā)情況下ACID的語(yǔ)義及Transactional表的ACID語(yǔ)義。
相關(guān)術(shù)語(yǔ)
- 操作:指在MaxCompute上提交的單個(gè)作業(yè)。
- 數(shù)據(jù)對(duì)象:指持有實(shí)際數(shù)據(jù)的對(duì)象,例如非分區(qū)表、分區(qū)。
- INTO類(lèi)作業(yè):指INSERT INTO、DYNAMIC INSERT INTO等包含關(guān)鍵字INTO的SQL作業(yè)。
- OVERWRITE類(lèi)作業(yè):指INSERT OVERWRITE、DYNAMIC INSERT OVERWRITE等包含關(guān)鍵字OVERWRITE的SQL作業(yè)。
- Tunnel數(shù)據(jù)上傳:可以歸結(jié)為INTO類(lèi)或OVERWRITE類(lèi)作業(yè)。
ACID語(yǔ)義描述
- 原子性(Atomicity):一個(gè)操作或是全部完成,或是全部不完成,不會(huì)結(jié)束在中間某個(gè)環(huán)節(jié)。
- 一致性(Consistency):從操作開(kāi)始至結(jié)束的期間,數(shù)據(jù)對(duì)象的完整性沒(méi)有被破壞。
- 隔離性(Isolation):操作獨(dú)立于其他并發(fā)操作完成。
- 持久性(Durability):操作處理結(jié)束后,對(duì)數(shù)據(jù)的修改將永久有效,即使出現(xiàn)系統(tǒng)故障,該修改也不會(huì)丟失。
MaxCompute并發(fā)寫(xiě)操作的ACID特性
- 原子性(Atomicity)
- 任何時(shí)候MaxCompute會(huì)保證在沖突時(shí)只有一個(gè)作業(yè)執(zhí)行成功,其他沖突作業(yè)執(zhí)行失敗。
- 對(duì)于單個(gè)表或分區(qū)的CREATE、OVERWRITE、DROP操作,可以保證其原子性。
- 跨表操作時(shí)不支持原子性(例如MULTI-INSERT)。
- 在極端情況下,以下操作可能不保證原子性:
DYNAMIC INSERT OVERWRITE
多于一萬(wàn)個(gè)分區(qū),不支持原子性。- INTO類(lèi)操作:這類(lèi)操作失敗的原因是事務(wù)回滾時(shí)數(shù)據(jù)清理失敗,但不會(huì)造成原始數(shù)據(jù)丟失。
- 一致性(Consistency)
- OVERWRITE類(lèi)作業(yè)可保證一致性。
- INTO類(lèi)作業(yè)在沖突失敗后可能存在失敗作業(yè)的數(shù)據(jù)殘留。
- 隔離性(Isolation)
- 非INTO類(lèi)操作保證讀已提交。
- INTO類(lèi)操作存在讀未提交的場(chǎng)景。
- 持久性(Durability)
- MaxCompute保證數(shù)據(jù)的持久性。
Transactional表的ACID特性
Transactional表的ACID特性在MaxCompute并發(fā)寫(xiě)操作的ACID特性基礎(chǔ)上,支持如下新特性:
- INTO類(lèi)操作保證讀已提交,作業(yè)沖突執(zhí)行失敗后無(wú)數(shù)據(jù)殘留。
- 對(duì)于單個(gè)非分區(qū)表或單個(gè)分區(qū)的UPDATE、DELETE、MERGE小文件操作,可以保證其原子性。
例如,當(dāng)兩個(gè)UPDATE操作并發(fā)修改同一分區(qū)時(shí),只會(huì)有一個(gè)UPDATE操作執(zhí)行成功。不會(huì)存在一個(gè)UPDATE操作部分執(zhí)行成功,也不會(huì)存在兩個(gè)UPDATE操作分別執(zhí)行成功的情況。
操作并發(fā)沖突說(shuō)明
當(dāng)作業(yè)并發(fā)運(yùn)行且寫(xiě)入相同目標(biāo)表時(shí),可能出現(xiàn)沖突。產(chǎn)生沖突時(shí),先結(jié)束的作業(yè)會(huì)執(zhí)行成功,后結(jié)束的作業(yè)可能會(huì)因沖突而報(bào)錯(cuò)。
下表為作業(yè)并發(fā)提交場(chǎng)景下,對(duì)同一個(gè)非分區(qū)表或分區(qū)的并發(fā)操作先后結(jié)束的沖突說(shuō)明。
作業(yè)類(lèi)型 | INSERT OVERWRITE/TRUNCATE作業(yè)(后結(jié)束) | INSERT INTO作業(yè)(后結(jié)束) | UPDATE/DELETE作業(yè)(后結(jié)束) | MERGE小文件作業(yè)(后結(jié)束) |
---|---|---|---|---|
INSERT OVERWRITE/TRUNCATE作業(yè)(先結(jié)束) |
|
|
|
|
INSERT INTO作業(yè)(先結(jié)束) |
|
|
|
|
UPDATE/DELETE作業(yè)(先結(jié)束) |
|
|
|
|
MERGE小文件作業(yè)(先結(jié)束) |
|
|
|
|
綜上所述,沖突報(bào)錯(cuò)規(guī)則概括如下:
- INSERT類(lèi)操作不會(huì)因?yàn)閿?shù)據(jù)變化而產(chǎn)生沖突報(bào)錯(cuò)。
- UPDATE、DELETE、MERGE小文件操作會(huì)因?yàn)槟繕?biāo)非分區(qū)表或分區(qū)數(shù)據(jù)變化而產(chǎn)生沖突報(bào)錯(cuò)。
說(shuō)明 需要注意的是,在極端情況下,如果多個(gè)作業(yè)并發(fā)且元數(shù)據(jù)正處于更新階段,可能因元數(shù)據(jù)更新而產(chǎn)生沖突報(bào)錯(cuò)。