Chapter 16 交易 Transaction
一個交易可以有多個動作所組成的,但其中的所有動作皆要完成,方可稱為『交易』(Transaction) 交付 A君 A君 B君 按任意鍵 --- 繼續 --- B君 交付 (1) (a)未完成的交易 (b)未完成的交易 A君 按任意鍵 --- 繼續 --- B君 一個交易可以有多個動作所組成的,但其中的所有動作皆要完成,方可稱為『交易』(Transaction) 完成交易 (2) (c)達成『交易』 德明財經科技大學 資訊科技系
現今社會的交易都改成買賣關係,也就是以金錢來換取貨物 在交易的過程當,『一手交錢,一手交貨』,已經道出了『交易』的意義 兩者的交付關係缺一不可,否則就不能稱為一個完整的交易 [狀況一] A君在時間t1將購買貨物之費用先行交付給B君 B君於時間t2點收到,並隔一段時間後,於時間點t3將貨品交付給A君 完成整個交易動作 [狀況二] A君已將金錢付於B君 B君因為某種原因下,無法順利將貨品交付,付出金錢的A君,勢必要將金錢取回 不能成功完成的交易,回復到交易開始之前的最原始狀態,也就是彼此互不交付任何東西的狀況 續下頁 德明財經科技大學 資訊科技系
續下頁 A 君 B 君 交易開始 一個交易 交錢 交貨 交易結束 t1 t2 t3 t4 圖9-2 現代交易 (a) 成功完成交易 德明財經科技大學 資訊科技系
× A 君 B 君 交易開始 一個交易 支付現金 交貨失敗 退還現金 取消交易 回到原始點 t1 t2 t3 t4 t5 按任意鍵 --- 繼續 --- 退還現金 取消交易 回到原始點 圖9-2 現代交易 (b) 取消原有交易 德明財經科技大學 資訊科技系
由ATM提款的工作程序 Q: 請問哪邊可能出錯?出錯後怎麼辦? 輸入密碼、提領金額 傳遞資訊至伺服器端 (網路傳遞資訊) 動作:提領、金額:3000元 帳戶餘額 =帳戶餘額 – 3000 (伺服器端計算) 錯誤檢查:例如餘額是否足夠 傳遞資訊至ATM端 (網路傳遞資訊) 吐出金額:3000元 ATM將錢放至出鈔口 列印明細表 Q: 請問哪邊可能出錯?出錯後怎麼辦? 德明財經科技大學 資訊科技系
如果是透過電腦系統的交易,可能會因為突發事件而導致交易的中斷,造成資料的不正確性,那又該如何處理呢? 現實的交易觀念都是透過人的交易行為 如果是透過電腦系統的交易,可能會因為突發事件而導致交易的中斷,造成資料的不正確性,那又該如何處理呢? 例如某君要將A帳戶轉出3,000元至B帳戶 由A帳戶先行扣除3,000元後,再將金額轉入B帳戶 如果在A帳戶完成扣款動作當下,突然停電,導致B帳戶無法正確地入帳 該君是否就白白損失該筆金額呢? 或是在電力恢復正常之後,將前半段完成的動作取消,並還原到使用者尚未轉帳前的狀況? 續下頁 德明財經科技大學 資訊科技系
× 停電 恢復供電 還原 恢復到原點 B 入款失敗 B = B + 3000 A 帳戶扣款 A 扣款成功 A = A - 3000 按任意鍵 --- 繼續 --- 停電 恢復供電 還原 恢復到原點 B × 入款失敗 B = B + 3000 A 帳戶扣款 A 扣款成功 A = A - 3000 B 帳戶入款 t1 t2 t4 t3 圖9-3 轉帳中發生停電 德明財經科技大學 資訊科技系
交易的基本特性 ACID 單元性(Atomicity) 一致性的保留(Consistency Preservation) 不論其中包括多少個,或多少種不同操作的一個交易,應該都被視為一個最小的處理單位,且不可再被切割 當一個交易開始處理之後,應該要完整且正確地執行完成,否則就應該將其所有操作取消,還原到最原始未開始處理前的情形 一致性的保留(Consistency Preservation) 在交易進行前,資料庫內的資料狀態彼此應該是一致性 在交易進行後,資料庫內的資料狀態應該也要保留此一致性,不應該在交易後破壞資料的一致性 獨立性(Isolation) 永久性(Durability or Permanency) 德明財經科技大學 資訊科技系
交易的基本特性 ACID 單元性(Atomicity) 一致性的保留(Consistency Preservation) 獨立性(Isolation) 無論電腦系統是如何執行,對於任何一個交易而言,在進行時,每一個交易應該具有獨立性,也就是交易進行中,彼此不應該影響執行的結果 永久性(Durability or Permanency) 當一個交易進行完成也被確認(committed)之後,所有資料項目應該永久地被記錄在資料庫中 不應該隨著時間或任何狀況導致其資料改變 除非下一次的交易進行改變 德明財經科技大學 資訊科技系
交易執行時可能的錯誤 資料庫伺服器是多工處理(multi-task) 資料只有一份,但是可能有兩個以上的行程想要使用資料 多個行程(processes)同時在一個處理器 資料只有一份,但是可能有兩個以上的行程想要使用資料 因為無法確保行程執行的順序,所以資料可能會出現不一致的錯誤 交錯執行時的並行(Concurrency)問題,如『生產者-消費者』問題 交易並行運作時,有可能發生的三種不同問題 遺失更新問題(Lost Update Problem) 不正確讀取問題(Dirty Read Problem) 不正確的總和問題(The Incorrect Summary Problem) 德明財經科技大學 資訊科技系
交易的兩個基本運作 Read(X)或是簡單表示成r(X) Write(X)或是簡單表示成w(X) 從資料庫中讀取一個資料項目X,存入相同的區域變數(Local Variable)名稱為X Write(X)或是簡單表示成w(X) 將區域變數(Local Variable)名稱為X,寫入資料庫的資料項目X 此操作有可能是新增、刪除或修改等其中之一 按任意鍵 --- 繼續 --- 交易T1 交易T2 X 資料項目 Read (X) 讀取 Write (X) 寫入 X T1的區域變數 X T2的區域變數 (a) Read (X) (b) Write (X) 德明財經科技大學 資訊科技系
交易的兩個基本運作 一個交易皆可包括多個Read及Write的不同存取操作在其中 每一個『交易』(Transaction)的表示方式皆會以Ti來表示之,下標i代表不同交易的編號 德明財經科技大學 資訊科技系
時間 T1 T2 T1值的變化 T2值的變化 t0 X=10、M=5、N=3 t1 Read(X) X=10 t2 X = X + M X = X – N X=7 t5 Write(X) t6 t7 Read(Y) Y=7 德明財經科技大學 資訊科技系
交易T1的區域變數 資料庫的資料項目 交易T2的區域變數 t0 M=5 N=3 t0 Read (X) t1 X=10 X=10 t1 t2 X=X+M=15 t2 Read (X) X=10 X=10 t3 t3 時間 X=X-N=7 t4 t4 Write (X) t5 X=15 X=15 t5 Write (X) t6 X=7 X=7 t6 Read (Y) t7 t7 Y=7 Y=7 德明財經科技大學 資訊科技系
德明財經科技大學 資訊科技系
× 交易T1的區域變數 資料庫的資料項目 交易T2的區域變數 t0 M=5 N=3 t0 Read (X) t1 X=10 X=10 t1 X=X+M=15 t2 X=15 暫時資料 Write (X) t3 X=15 t3 時間 Read (X) X=15 X=15 t4 t4 t5 X=X-N=12 t5 Write (X) t6 t6 X=12 X=12 故障 t7 t7 Read (Y) × t8 t8 Y=7 Y=7 德明財經科技大學 資訊科技系
德明財經科技大學 資訊科技系
交易T1的區域變數 資料庫的資料項目 交易T2的區域變數 t0 M=15 SUM=0 t0 Read (X) t1 X=100 X=100 X=X-M=85 t2 Write (X) t3 X=85 X=85 t3 時間 Read (Y) t4 Y=50 Y=50 t4 Read (X) t5 X=85 X=85 t5 t6 Read (Y) t6 Y=50 Y=50 t7 t7 SUM=X+Y=135 t8 Y=Y+M=65 t8 Write (Y) t9 t9 Y=65 Y=65 德明財經科技大學 資訊科技系
鎖定 Lock 使用Lock的機制解決並行運作可能的錯誤 也是作業系統常用的技巧 類型 『獨佔模式』 『分享模式』 『二元鎖定』 (Binary Locks) 『分享模式』 『共享/互斥鎖定』(Shared/Exclusive Locks) 或稱為『讀/寫鎖定』(Read/Write Locks) 德明財經科技大學 資訊科技系
二元鎖定 Binary Lock 二元鎖定(Binary Locks)的狀態情形只會有兩種 『鎖定』 『非鎖定』 任何一個資料項目X,皆會結合一個,也僅會結合一個鎖定狀態值 二元鎖定的操作中,主要可分為兩種操作 如果要將資料項目X鎖定,則使用lock(X)將資料項目X的鎖定狀態設為『鎖定』狀態 如果要將資料項目X由鎖定狀態轉為『非鎖定』狀態,則使用unlock(X)來解除鎖定,也就是將資料項目X釋放出給其他交易鎖定後使用 德明財經科技大學 資訊科技系
二元鎖定 (b) 解除鎖定 (a) 鎖定 lock (X) isLOCK (X )=‘unLocked’ Waiting isLOCK (X) ‘Locked’ Yes No Queuing unlock (X) isLOCK (X) ‘unLocked’ (a) 鎖定 (b) 解除鎖定 Wake Up Queuing Transaction 圖10-4 二元鎖定與解除鎖定流程示意圖 德明財經科技大學 資訊科技系
二元鎖定 任何一個交易T中,在對資料項目X執行讀取Read(X)操作或寫入Write(X)操作之前,必須先執行鎖定操作lock(X) 任何一個交易T中,在對資料項目X完成所有的讀取Read(X)操作和寫入Write(X)操作之後,必須要執行解除鎖定指令unlock(X) 如果一個交易T已經對資料項目X鎖定,則不可再執行一次的鎖定操作lock(X),也就是不可以對同個資料項目執行兩次或兩次以上的鎖定 除非交易T已經對資料項目X鎖定,否則不可以執行解鎖操作unlock(X) 德明財經科技大學 資訊科技系
二元鎖定 優點 缺點 在實作上很容易達成,只需要兩種基本指令 lock(X)與unlock(X) 不同交易之間對同一資料項目的共享性很差 X … R6(X) W4(X) R3(X) R5(X) R2(X) R1(X) X (a) 二元鎖定 Lock3 (X) Lock5 (X) Lock2 (X) Lock1 (X) … R6(X) W4(X) R3(X) R5(X) R2(X) R1(X) X 德明財經科技大學 資訊科技系 (b) 共享鎖定
讀取/寫入鎖定 『讀取/寫入鎖定』(Read/Write Locks) 或稱為『共享/互斥鎖定』(Shared/Exclusive Locks) 將二元鎖定的lock指令再分為兩種不同的鎖定,分別為 readLock(X) 針對某操作僅僅要對資料項目X進行讀取動作時,所下的一種共享鎖定(Shared Lock),讓彼此皆為讀取的操作可以共同分享資料項目X writeLock(X) 針對資料項目X進行寫入動作時,所下的一種互斥鎖定,也就是不讓任何其他的操作共同分享資料項目X,而是由此操作獨佔使用 只要彼此之間皆為讀取鎖定(Read Lock),也就是共享鎖定(Shared Lock),則會被允許 只要有一個為寫入鎖定(Write Lock),也就是互斥鎖定(Exclusive Lock),則不與任何鎖定共享 解除鎖定unLock(X)來解除readLock(X)和writeLock(X)。 共享鎖(S) 互斥鎖(X) ˇ × 鎖定種類 共享性 鎖定種類 德明財經科技大學 資訊科技系
讀取/寫入鎖定 任何交易T在執行對資料項目X進行讀取操作Read(X)之前,必須要先執行讀取鎖定操作readLock(X)或寫入鎖定操作writeLock(X),鎖定成功之後,方能對資料項目X進行讀取,否則必須要等待,直到鎖定成功為止 任何交易T在執行對資料項目X進行寫入操作Write(X)之前,必須要先執行寫入鎖定操作writeLock(X),鎖定成功之後,方能對資料項目X進行寫入,否則必須要等待,直到鎖定成功為止 任何交易T在執行完成讀取操作Read(X)或寫入操作Write(X)之後,必須執行對資料項目X的解除鎖定操作unLock(X) 一個交易T如果已經持有讀取鎖定或寫入鎖定,則不可再執行一次讀取鎖定操作readLock(X) 德明財經科技大學 資訊科技系