MVC-07 案例1
生活随笔
收集整理的這篇文章主要介紹了
MVC-07 案例1
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
>>>>>ContosoUniversity網站
-------------------------------------------
一、并發沖突
1. 為什么會并發沖突?
l并發沖突的例子 ?假設你想在網上訂機票。查詢你的航班,發現還有座位,但是當你單擊預訂按鈕時,系統提示機票已售罄。如果再次查詢該航班,發現已經沒有座位了。這是怎么回事呢?原來是在你查詢到結果和預訂之間,其他人預訂了最后一張票。系統對最后一張票進行了并發查詢,如果沒有并發檢查,該航班的機票就會超額預訂。 從技術上來說,程序中的每個可編輯的實體都存在爭用的情況。但是在現實世界中,有非常少的數據受到爭用,常常不是太重要而不值得并發檢查。 ?例如,訂單?
客戶和供應商?
產品的價格和庫存量?
l并發更新、并發刪除 l數據庫是共享式的。 l對同一資源的訪問,造成并發沖突,數據意外丟失。2. 并發沖突的類型?
(1)悲觀并發控制(Pessimistic Concurrency) ??? 以獨占方式物理鎖定數據庫中的數據,當數據被鎖定,其他用戶就不能再訪問它了,讀取或更新都不行,直到數據被更新或者解除鎖定。 ü好處是它允許單個用戶以獨占方式訪問信息,消除了任何可能的爭用。 ü但從性能和使用上來說以獨占方式鎖定會產生很多并發癥狀。—影響他人效率
—如果程序奔潰
悲觀并發背后的理念是因為數據可能存在爭用,數據由第一個讀取者鎖定。解決并發問題的另一個技術是反其道而行之:因為數據并不頻繁爭用,鎖定數據是沒有意義的,我們讓爭用檢查只在更新階段執行。
(2)樂觀并發控制(Optimistic Concurrency) ?允許沖突發生,設置相應的處理機制或通知用戶。 ?當更新數據庫時,必須檢查自從檢索了數據起它就沒有發生變化。 ?對系部信息的編輯,如果預算原來為3500,John修改為0;在John按保存之前,Jane更改了系建立日期從2007年9月1日到2013年8月8日。沖突產生。。。 ü處理方法:—跟蹤用戶已修改的屬性,只更新數據庫中的相應的列。兩個人的修改都保存到數據庫。
—客戶端贏或最后一個贏。Jane的更改覆蓋John的更改。不需要編碼,自動發生。
—存儲區贏。John的更改覆蓋Jane的更改。我們即將講解如何實現。
樂觀并發提升了系統的可擴展性和可使用性,因為數據總是可讀取的。主要的缺點是除非你寫一些復雜的代碼,否則得到并發異常的用戶必須重新讀取更新數據,然后應用修改。通常浪費的時間是可接受的,有時不是。
檢測并發沖突
l通過引發OptimisticConcurrencyException異常處理來解決沖突。 ?為每一行的修改添加一個版本控制列。在并發修改的情況下,第一個保存的數據成功,其他的就不能更新數據,因為自從讀取了數據,版本已經發生了變化。 ?在Update和Delete命令的Where子句中,檢查版本。 二、Lazy、 Eager,和Explicit加載的相關數據(1)Lazy loading
- 實體讀取時,并不加載數據,使用時加載數據。掌握代碼。熟記樣例代碼。
(2)Eager Loading
- 實體讀取時,獲取相關數據。熟記樣例代碼。
(3)Explicit Loading
l實體讀取時,獲取相關數據。熟記樣例代碼。 ?三、請為ContosoUniversity網站設計類圖,并編寫教師類、學生類、課程類、選課類的代碼。轉載于:https://www.cnblogs.com/meetyy/p/3483106.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的MVC-07 案例1的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hibernate小记
- 下一篇: 02-导航实例-storyboard实现