1.什么是事務(wù)
要么全部成功,要么全部失敗
2.什么是本地事務(wù)
也就是基于關(guān)系型數(shù)據(jù)庫的事務(wù),也稱為傳統(tǒng)事務(wù)
常見模式 如:
transaction begin
insert/delete/update
…
transaction commit/rollback
本地事物的特征:
1.一次事務(wù)過程中只能連接一個(gè)支持關(guān)系型數(shù)據(jù)庫.
2.事務(wù)的執(zhí)行結(jié)果滿足ACID
3.事務(wù)執(zhí)行的過程中會(huì)用到數(shù)據(jù)庫本身的鎖機(jī)制.
數(shù)據(jù)庫事務(wù)的四大特性ACID:
A(Atomic):原子性,構(gòu)成事務(wù)的所有操作,要么都執(zhí)行完成,要么全部不執(zhí)行,不可能出現(xiàn)部分成功部分失敗的情況。
C(Consistency):一致性,在事務(wù)執(zhí)行前后,數(shù)據(jù)庫的一致性約束沒有被破壞。比如 :張三向李四轉(zhuǎn)100元,轉(zhuǎn)賬前和轉(zhuǎn)賬后的數(shù)據(jù)是正確狀態(tài)這叫一致性,如果出現(xiàn)張三轉(zhuǎn)出100元,李四賬戶沒有增加100元這就出現(xiàn)來數(shù)據(jù)錯(cuò)誤,就沒有達(dá)到一致性。
I(Isolation):隔離性,數(shù)據(jù)庫中的事務(wù)一般都是并發(fā)的,隔離性是指并發(fā)的兩個(gè)事務(wù)的執(zhí)行互不干擾,一個(gè)事務(wù)不能看到其他事務(wù)運(yùn)行過程的中間狀態(tài)。通過配置事務(wù)隔離級(jí)別可以避免贓讀、重復(fù)讀等問題。
D(Durability):持久性,事務(wù)完成之后,該事務(wù)對數(shù)據(jù)的更改會(huì)被持久化到數(shù)據(jù)庫,且不會(huì)被回滾。
數(shù)據(jù)庫事務(wù)在實(shí)現(xiàn)時(shí)會(huì)將一次事務(wù)涉及的操作全部納入到一個(gè)不可分割的執(zhí)行單元,該執(zhí)行單元中的所有操作要么都成功,要么都失敗,只要其中任一操作執(zhí)行失敗,都將導(dǎo)致整個(gè)事務(wù)的回滾。
3.什么是分布式事務(wù)
分布式事務(wù)是一種涉及多個(gè)數(shù)據(jù)庫或分布在不同服務(wù)器上的其他資源的事務(wù)。它用于協(xié)調(diào)這些資源的動(dòng)作,以確保事務(wù)所做的更改是原子的、一致的、隔離的和持久的 (ACID)。
4.Seata 是什么
Seata 是一款開源的分布式事務(wù)解決方案,致力于在微服務(wù)架構(gòu)下提供高性能和簡單易用的分布式事務(wù)服務(wù)。
5.兩階段提交協(xié)議(2PC)
兩階段提交又稱2PC(two-phase commit protocol),2pc是一個(gè)非常經(jīng)典的強(qiáng)一致、中心化的原子提交協(xié)議。這里所說的中心化是指協(xié)議中有兩類節(jié)點(diǎn):一個(gè)是中心化協(xié)調(diào)者節(jié)點(diǎn)(coordinator)和N個(gè)參與者節(jié)點(diǎn)(partcipant)。
準(zhǔn)備階段:事務(wù)協(xié)調(diào)者,向所有事務(wù)參與者發(fā)送事務(wù)內(nèi)容,詢問是否可以提交事務(wù),并等待參與者回復(fù)。事務(wù)參與者收到事務(wù)內(nèi)容,開始執(zhí)行事務(wù)操作,講 undo 和 redo 信息記入事務(wù)日志中(但此時(shí)并不提交事務(wù))。如果參與者執(zhí)行成功,給協(xié)調(diào)者回復(fù)yes,表示可以進(jìn)行事務(wù)提交。如果執(zhí)行失敗,給協(xié)調(diào)者回復(fù)no,表示不可提交。
提交階段:如果協(xié)調(diào)者收到了參與者的失敗信息或超時(shí)信息,直接給所有參與者發(fā)送回滾(rollback)信息進(jìn)行事務(wù)回滾,否則,發(fā)送提交(commit)信息。參與者根據(jù)協(xié)調(diào)者的指令執(zhí)行提交或者回滾操作,釋放所有事務(wù)處理過程中使用的鎖資源。(注意:必須在最后階段釋放鎖資源) 。
6.redo log的文件和undo log文件的區(qū)別
當(dāng)事務(wù)發(fā)生異?;蝻@式回滾時(shí),使用undo log回滾數(shù)據(jù),即:存儲(chǔ)的數(shù)據(jù)是修改或刪除之前的數(shù)據(jù),其數(shù)據(jù)類型以二進(jìn)制blob類型存在,當(dāng)回滾完成或者程序結(jié)束時(shí),自動(dòng)釋放。
redo log當(dāng)然存儲(chǔ)的是修改或者刪除之后的數(shù)據(jù)啦。redo log不是隨著事務(wù)提交才寫入文件的,而是從事務(wù)開始就逐步寫入文件了(即使事務(wù)還沒提交)