樂觀鎖 (optimistic lock)
顧名思義,就是很樂觀,假設資料一般情況下不會造成衝突,只有在資料進行提交更新的時候,才會正式對資料的衝突與否進行檢測,如果發現衝突了,則讓返回使用者錯誤的資訊,讓使用者決定如何去做。一般使用資料版本、timespan來實現。
何謂資料版本?即為資料增加乙個版本號。在基於資料庫表的版本解決方案中,一般是通過為資料庫表增加乙個 「version」 欄位來實現。讀取出資料時,將此版本號一同讀出,並加1,提交更新時,先將待提交資料的版本號與資料庫表中對應記錄的版本號進行比對,如果提交的資料版本號大於資料庫表當前版本號,則予以更新,否則認為是過期資料。
如:資料庫的版本號是0, 讀取0,然後加1,得到1.
提交的時候, 和資料庫對比, 此時如果資料庫中仍然是0, 則1>0, 可以更新, 如果庫中版本號大於0, 則不允許更新。
樂觀鎖存在失效的情況,屬小概率事件,需要多個條件共同配合才會出現。如:
樂觀鎖此時的失效,根本原因在於應用所使用的主鍵id管理策略, 正好與樂觀鎖存在極小程度上的不相容。
悲觀鎖,正如其名,它指的是對資料被其他事務修改持悲觀態度,因此,在事務a處理資料的過程中,一直將資料鎖定,這樣其他想拿這個資料就會block住,直到事務a放開鎖。
悲觀鎖的實現,往往依靠資料庫提供的鎖機制 (也只有資料庫層提供的鎖機制才能真正保證資料訪問的排他性,否則,即使在本系統中實現了加鎖機制,也無法保證外部系統不會修改資料)
悲觀鎖樂觀鎖
1 悲觀鎖,正如其名,它指的是對資料被外界 包括本系統當前的其他事務,以及來自外部系統的事務處理 修改持保守態度,因此,在整個資料處理過程中,將資料處於鎖定狀態。悲觀鎖的實現,往往依靠資料庫提供的鎖機制 也只有資料庫層提供的鎖機制才能真正保證資料訪問的排他性,否則,即使在本系統中實現了加鎖機制,也無...
樂觀鎖 悲觀鎖
悲觀鎖 pessimistic lock 顧名思義,就是很悲觀,每次去拿資料的時候都認為別人會修改,所以每次在拿資料的時候都會上鎖,這樣別人想拿這個資料就會block直到它拿到鎖。傳統的關係型資料庫裡邊就用到了很多這種鎖機制,比如行鎖,表鎖等,讀鎖,寫鎖等,都是在做操作之前先上鎖。樂觀鎖 optim...
樂觀鎖 悲觀鎖
樂觀鎖 悲觀鎖 悲觀鎖 pessimistic locking 悲觀鎖,正如其名,它指的是對資料被外界 包括本系統當前的其他事務,以及來自外部系統的事務處理 修改持保守態度,因此,在整個資料處理過程中,將資料處於鎖定狀態。悲觀鎖的實現,往往依靠資料庫提供的鎖機制 也只有資料庫層提供的鎖機制才能真正保...