事務(wù)是指對系統(tǒng)進行的一組操作,為了保證系統(tǒng)的完整性,事務(wù)需要具有ACID特性,具體如下:
1. 原子性(Atomic)
? ? ?一個事務(wù)包含多個操作,這些操作要么全部執(zhí)行,要么全都不執(zhí)行。
2. 一致性(Consistency)
? ? ?一致性是指事務(wù)使得系統(tǒng)從一個一致的狀態(tài)轉(zhuǎn)換到另一個一致狀態(tài)。事務(wù)的一致性決定了一個系統(tǒng)設(shè)計和實現(xiàn)的復(fù)雜度。事務(wù)可以不同程度的一致性:
? ? ?強一致性:讀操作可以立即讀到提交的更新操作。
? ? ?弱一致性:提交的更新操作,不一定立即會被讀操作讀到,此種情況會存在一個不一致窗口,指的是讀操作可以讀到最新值的一段時間。
3. 隔離性(Isolation)
? ? ?并發(fā)事務(wù)之間互相影響的程度,比如一個事務(wù)會不會讀取到另一個未提交的事務(wù)修改的數(shù)據(jù)。
4. 持久性(Durability)
? ? ?事務(wù)提交后,對系統(tǒng)的影響是永久的。
1、原子性和一致性的的側(cè)重點不同:原子性關(guān)注狀態(tài),要么全部成功,要么全部失敗,不存在部分成功的狀態(tài)。而一致性關(guān)注數(shù)據(jù)的可見性,中間狀態(tài)的數(shù)據(jù)對外部不可見,只有最初狀態(tài)和最終狀態(tài)的數(shù)據(jù)對外可見。
2、在未提交讀的隔離級別下,會造成臟讀,這就是因為一個事務(wù)讀到了另一個事務(wù)操作內(nèi)部的數(shù)據(jù)。ACID中是的一致性描述的是一個最理想的事務(wù)應(yīng)該怎樣的,是一個強一致性狀態(tài),如果要做到這點,需要使用排它鎖把事務(wù)排成一隊,即Serializable的隔離級別,這樣性能就大大降低了。現(xiàn)實是骨感的,所以使用隔離性的不同隔離級別來破壞一致性,來獲取更好的性能。