2016-09-24 70 views
0

我一直在試圖理解這些類型的數據庫事務。從我理解的快照事務中,通過發送相對較少的數據庫舊時間快照來保持併發性。當有很多調用時,悲觀阻塞了一個事務的操作,樂觀的情況下可以讓你調用多個不帶鎖的調用。我能正確理解這些嗎?快照如何處理鎖?快照,悲觀和樂觀事務之間的區別

有人可以解釋這些如何發揮一致性,可用性,甚至網絡分區(CAP定理)?

回答

0

數據庫鎖

在其他系統中,數據庫鎖用來保護共享資源或對象。這些受保護的資源可能是

  1. 表。
  2. 數據行。
  3. 數據塊。

鎖可以是讀鎖或寫鎖,當多個用戶需要同時訪問數據庫時使用。這可以防止數據被破壞或失效。當多個用戶嘗試讀取或其他用戶嘗試寫入數據庫時​​,會發生此類問題。

任何單個用戶都可以修改數據庫記錄,這些數據庫記錄是他們應用了鎖的數據庫中的項目,讓他們可以獨佔訪問記錄,直到鎖定被釋放。

悲觀鎖定

在保守式鎖定,記錄或頁面立即請求鎖時鎖定。

悲觀鎖定是指當您鎖定記錄以供專用時,直到完成記錄爲止。它具有比樂觀鎖定更好的完整性,但要求您小心應用程序設計以避免死鎖。要使用悲觀鎖定,您需要直接連接到數據庫(通常是兩層客戶端服務器應用程序中的情況)或可以獨立於連接使用的外部可用事務ID。

樂觀鎖

  • 開始 - 時間戳標記。
  • 修改。
  • 驗證
  • 提交/回滾

樂觀鎖是一個戰略,你讀取記錄,注意版本號的(其他的方法來做到這一點包括日期,時間戳或校驗/哈希)和檢查在寫回記錄之前版本沒有改變。當您將記錄寫回時,可以過濾版本上的更新以確保它是原子性的。 (即在您檢查版本並將記錄寫入磁盤之間未更新)並在一次命中中更新版本。

如果記錄髒(即與您的版本不同),則中止事務,用戶可以重新啓動或回滾。

快照

快照是數據庫的一個只讀靜態視圖。

希望這會幫助你理解!