併發訪問中事務的相關描述

MVC開發中,service層統稱爲業務層,在service的每一個方法中,負責調用不一樣的dao層組件完成常規的CRUD操做,在不加事務的狀況下,就會出現各類亂象,違背了事務特性,所以,事務在MVC開發中所佔的角色重要性不言而喻。
所謂事務,能夠從它的特性特性分析,它有如下四個重要特性: 這幾個特性是任何健壯的MVC應用都應該具有的多線程

  1. 原子性併發

  2. 一致性線程

  3. 隔離型htm

  4. 持久性生命週期


如下用生活中購物的例子做爲闡述事務特性的比喻,重點在於體現事務在整個業務邏輯生命週期中所扮演的角色,用以幫助理解相關細節:事件

  1. 原子性是一個獨立的不可再分的操做單元,執行該業務邏輯要麼所有成功,要麼所有失敗,現實生活中你去購買東西,就是一個完整的業務邏輯,該業務邏輯涉及到你付錢給收銀員,收銀員將你所購買的東西交給你,若是在你付錢這個步驟出現失敗,那麼整個業務邏輯都應該被回滾,而不該該出如今你付錢失敗的狀況下,收銀員將你所購的東西交給你,這樣就不合常理,也就是違背了購物邏輯所應具有的原子性;事務

  2. 一致性能夠從上述的例子中體現出來,在購物這個事務未執行之前,你所要付的款項在你本身手裏,而你所要購買的東西在收銀員手裏,在購物事務發生以後,東西在你手裏,而款項在收銀員手裏,等價交換,先後擁有一致性;開發

  3. 隔離性體如今因爲是多線程,每一個現成中發生的業務邏輯和其它現成都是獨立的,不會出現數據共享或者暴露相關細節,如你購買東西,不可能讓別人幫你付錢,你付了錢,收銀員不可能把東西交給別人,這就是事務特性中的隔離性;get

  4. 持久性,持久性是指在該購物邏輯發生以後,相關的數據記錄會被持久保存下來,收銀員經過收銀系統將物品售出及所收款項錄入營業系統,該次業務邏輯的相關細節被持久保存一下以備往後統計之用;
    以上只是經過購物這個環節形象說明事務所具有的四個特徵,用以幫助理解;it


併發訪問下的問題列舉:

  1. 髒讀

  2. 不可重複讀

  3. 幻讀

  4. 第一類丟失更新

  5. 第二類丟失更新

分析產生以上問題的緣由:

因爲計算機的處理器採用分時多任務處理,每一個線程的業務邏輯操做按照時間來輪訓,具備不肯定性,所以致使瞭如下問題的發生一、髒讀:當事務讀取還未提交的數據的時候,就會發生這種事件,舉例來講:事務1修改了一行數據,而後事務2在事務1還未提交修改操做以前讀取了被修改的行,假如事務1進行了回滾操做,那麼事務2讀取的數據就屬於髒數據,該數據只是事務1過程當中的一個臨時值,最終是不存在的。二、不可重複讀:當事務2次讀取同一行數據的時候,獲得的結果不同,舉例來講,事務1讀取了一行數據,而後事務2修改或者刪除改行並提交修改操做,當事務1從新讀取該行的時候,就會讀到和第一次數據不一致的版本,或者發現該數據已經不存在(在事務2刪除提交以後)的現象稱爲不可重複讀。三、幻讀:事務1基於必定的條件搜索了某張表,事務2插入並提交了基於該條件的一條記錄,當事務1再次讀取的時候,就會發現多了或者少了某些數據,該現象稱爲幻讀,如同作夢通常;四、第一類丟失更新:對於同一個帳戶,假設有1000元,事務1進行提取操做,事務2進行轉行操做,事務1開始事務,讀取帳戶快照爲1000元,事務2一樣讀取快照爲1000元,事務1成功提取200元,修改並提交最終記錄爲800元,事務2因爲操做失敗回滾,此時的回滾將會將該帳戶記錄回滾到事務2開始的地方,也就是該帳戶會從新被回滾到1000元,覆蓋了事務1的提取修改。五、第二類丟失更新:是不可重複讀的一種特例,事務1和事務2同時取款,事務1取款後提交,事務2再次查詢的時候發現帳戶少了事務1所取的款項,此時事務2不知道應該以那個爲標準,是以第一次查詢爲標準仍是最後一次查詢,假如不重複讀取,事務2則會覆蓋掉事務1的提交;

相關文章
相關標籤/搜索