樂觀鎖 vs 悲觀鎖

更新於 發佈於 閱讀時間約 1 分鐘
在介紹什麼是樂觀鎖、什麼是悲觀鎖之前,我們先來了解一下,這兩個鎖是應用在什麼地方?

資料庫

資料庫是用來處理資料的讀取與寫入,而資料庫的交易行為 (transaction) 必須符合 ACID,其中的 I 為 Isolation,指的是資料庫在對同個資料同時進行多筆交易時,必須避免產生資料的不一致。
白話的意思是,當大家在搶購五月天演唱會的門票時,其中有一萬個人同一時間點選了 A 區第 B 排的序號 5 的座位,資料庫不能讓這一萬個人全部都買到票,只能有一位幸運兒得到,也就是只能有一位使用者能成功將其資訊寫入資料庫。
為了達成這件萬中選一的情況,就必須使用到「鎖」的概念。

悲觀鎖

從字面上來想,可以很清楚的知道,這個鎖是用悲觀來看待資料的寫入。基於對事件的不信任,所採取的行為。
悲觀鎖的概念是,眾多行為裡,只有一個行為能被接受,其餘的行為必須等待前面的行為結束。
像是,學校老師在所有學生同時發問時,很難完整接收到大家的問題,為了避免這樣的狀況發生,我想老師一定會要求學生「一個一個」發問,小明問完,小美才能接著問,小美問完,小華才能繼續問,直到所有問題都問完,或是老師要下班離開了。這樣的操作就是**悲觀鎖**的概念。
在資料庫的 Isolation,就是悲觀鎖的概念,為的就是避免在眾多使用者同時對同一筆資料進行任何改動的操作(資料爭用激烈)時,導致資料或數據的不一致。

樂觀鎖

樂觀鎖就是跟悲觀鎖相反的概念,它不會對任何的 transaction 進行限制,所以通常會是在「資料爭用」狀況小、使用者們的操作對彼此的影響小的時候採用樂觀鎖。
avatar-img
1會員
13內容數
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
Mike的沙龍 的其他內容
在 Rails 裡常常可以看到 redirect_to 跟 render,但這兩者到底有什麼差異呢? Redirect_to redirect_to 後面接網址路徑,是用來轉到該網址路徑去,也就是換到一個新的頁面。 如果在 new 的頁面上 (同一條溪流,這一秒的水流跟下一秒的水流是不一樣的水流)
Find 輸入一個 id 參數後,尋找相對應的一筆資料。 在 SQL 的部分: 如果 find 找不到相對應的資料時,會跳出兇殘的錯誤訊息: Find_by 輸入一個或多個參數後,找到相對應的一筆資料。 在 SQL 的部分: Where 輸入一個或多個參數後,找到相對應的多筆資料。
避免使用者在資料寫入時,強行新增非官網的資料時,所進行的預設阻擋功能。 所以必須新增一個「白名單」,才能正常寫入: 寫了這段後,除了 permit 的資料,其他額外的資料都會被過濾掉,不會進來。
MVC是一套網頁開發的架構流程,代表著從前端到後端的各自分工。 M: Model 多個 model 建立的 tables 們能夠透過 foreign_key 或是 belongs_to / has_one / has_many,將彼此的資料產生關聯。 V: View C: Controller
直接來看範例吧
  一切的重點就是在利用文字排版與語言解構使程式碼more「readable」   範例如下列網址,有興趣深入了解可進去觀看
在 Rails 裡常常可以看到 redirect_to 跟 render,但這兩者到底有什麼差異呢? Redirect_to redirect_to 後面接網址路徑,是用來轉到該網址路徑去,也就是換到一個新的頁面。 如果在 new 的頁面上 (同一條溪流,這一秒的水流跟下一秒的水流是不一樣的水流)
Find 輸入一個 id 參數後,尋找相對應的一筆資料。 在 SQL 的部分: 如果 find 找不到相對應的資料時,會跳出兇殘的錯誤訊息: Find_by 輸入一個或多個參數後,找到相對應的一筆資料。 在 SQL 的部分: Where 輸入一個或多個參數後,找到相對應的多筆資料。
避免使用者在資料寫入時,強行新增非官網的資料時,所進行的預設阻擋功能。 所以必須新增一個「白名單」,才能正常寫入: 寫了這段後,除了 permit 的資料,其他額外的資料都會被過濾掉,不會進來。
MVC是一套網頁開發的架構流程,代表著從前端到後端的各自分工。 M: Model 多個 model 建立的 tables 們能夠透過 foreign_key 或是 belongs_to / has_one / has_many,將彼此的資料產生關聯。 V: View C: Controller
直接來看範例吧
  一切的重點就是在利用文字排版與語言解構使程式碼more「readable」   範例如下列網址,有興趣深入了解可進去觀看
你可能也想看
Google News 追蹤
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
本文介紹資料庫鎖(DB lock)的基本概念、鎖的類型及其優缺點。通過對資料庫鎖的深入探討,我們可以理解如何在多用戶環境下保護資料的一致性與完整性,並瞭解排他鎖、共享鎖、意向鎖等不同類型鎖的作用。此外,文章還分析了鎖競爭、鎖等待和死鎖等可能的問題,幫助讀者更全面地掌握資料庫鎖的運作機制。
Thumbnail
※ 為什麼我們需要 Transaction? 當我們談到 Transaction(交易)時,指的是一組不可分割的 SQL 操作。這些操作結果只能成功或失敗,以確保資料庫的一致性和完整性。Transaction 是資料庫操作中的一個「邏輯單位」,包含多個操作步驟。如果其中任何一個步驟失敗,整個 Tr
Thumbnail
在交易裡面,我們需要理解走勢的為什麼。深深的進入去理解。理解走勢的第一步,然後是走勢的第二步,走勢的第三步,第四步,第五步,第六步,然後到走勢未來會去的那一個最後步。就是去看見。
Thumbnail
看完高瑞希於今日(6/28)發布的《無條件的自愛,才會成就大愛》,我想起了過往不容批評的我,還有最近不懂為何有人會情緒性地卯起來封鎖自己看不慣的人事物,也一併有了解答。 這兩者看似無關,其實都是創傷後的自我防衛,即使對方並非針對性地攻擊自己。 過往容不得被批評的我,最嚴重的時期大概是在四、五
※ 什麼是資料庫正規化?為什麼需要正規化? 什麼是資料庫正規化? 資料庫正規化是一種設計關聯式資料庫的方法,目的是建立良好結構的關聯表,主要目的有二: 去除重複性:建立沒有重複的關聯表。因為重複資料不只浪費資料庫的儲存空間,而且會產生資料維護上的問題。 去除不一致的相依性:資料相依是指關聯表
Thumbnail
閘門-05 這個閘門是等待的閘門,它代表了你內在的信任,讓你能夠在對的時機進入生命之流。你可能會好奇,這個信任是怎麼來的?是不是要經過很多練習和經驗?其實不然,這個信任是你與生俱來的,是你的直覺和感受,是你的天賦和才華。你不需要學習或努力,你只需要保持和等待,你就能發揮你的潛能和影響力。
Thumbnail
需要爭第一,其實就代表(還)沒有競爭優勢,所以才需要努力爭第一。如果當唯一,就不需要努力與他人競爭,也許不是賺最多,但賺最穩是相對較為可能的,也就是說,它的投資結果是相對容易預測的。
Thumbnail
除非你有‘’決策恐懼症‘’(Decidophobia), 或是稱為“選擇困難症”,每個人每一天都會面對各種情況,也都必須做出選擇。差別只是,你是做出什麼樣的選擇?尤其,面對比較重大的情況時,你會以什麼樣的思維方式來做選擇。 仔細回想過去面對比較重大情況;必須做選擇時,竟然發現自己不愛跟從多數人所愛
Thumbnail
由於我是單向操作,沒有作空,真正大空頭來臨或是系統性風險,基本上對散戶而言,保留現金就是最好的避險,所以我的資金調節可以分4階段... 可否不
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
本文介紹資料庫鎖(DB lock)的基本概念、鎖的類型及其優缺點。通過對資料庫鎖的深入探討,我們可以理解如何在多用戶環境下保護資料的一致性與完整性,並瞭解排他鎖、共享鎖、意向鎖等不同類型鎖的作用。此外,文章還分析了鎖競爭、鎖等待和死鎖等可能的問題,幫助讀者更全面地掌握資料庫鎖的運作機制。
Thumbnail
※ 為什麼我們需要 Transaction? 當我們談到 Transaction(交易)時,指的是一組不可分割的 SQL 操作。這些操作結果只能成功或失敗,以確保資料庫的一致性和完整性。Transaction 是資料庫操作中的一個「邏輯單位」,包含多個操作步驟。如果其中任何一個步驟失敗,整個 Tr
Thumbnail
在交易裡面,我們需要理解走勢的為什麼。深深的進入去理解。理解走勢的第一步,然後是走勢的第二步,走勢的第三步,第四步,第五步,第六步,然後到走勢未來會去的那一個最後步。就是去看見。
Thumbnail
看完高瑞希於今日(6/28)發布的《無條件的自愛,才會成就大愛》,我想起了過往不容批評的我,還有最近不懂為何有人會情緒性地卯起來封鎖自己看不慣的人事物,也一併有了解答。 這兩者看似無關,其實都是創傷後的自我防衛,即使對方並非針對性地攻擊自己。 過往容不得被批評的我,最嚴重的時期大概是在四、五
※ 什麼是資料庫正規化?為什麼需要正規化? 什麼是資料庫正規化? 資料庫正規化是一種設計關聯式資料庫的方法,目的是建立良好結構的關聯表,主要目的有二: 去除重複性:建立沒有重複的關聯表。因為重複資料不只浪費資料庫的儲存空間,而且會產生資料維護上的問題。 去除不一致的相依性:資料相依是指關聯表
Thumbnail
閘門-05 這個閘門是等待的閘門,它代表了你內在的信任,讓你能夠在對的時機進入生命之流。你可能會好奇,這個信任是怎麼來的?是不是要經過很多練習和經驗?其實不然,這個信任是你與生俱來的,是你的直覺和感受,是你的天賦和才華。你不需要學習或努力,你只需要保持和等待,你就能發揮你的潛能和影響力。
Thumbnail
需要爭第一,其實就代表(還)沒有競爭優勢,所以才需要努力爭第一。如果當唯一,就不需要努力與他人競爭,也許不是賺最多,但賺最穩是相對較為可能的,也就是說,它的投資結果是相對容易預測的。
Thumbnail
除非你有‘’決策恐懼症‘’(Decidophobia), 或是稱為“選擇困難症”,每個人每一天都會面對各種情況,也都必須做出選擇。差別只是,你是做出什麼樣的選擇?尤其,面對比較重大的情況時,你會以什麼樣的思維方式來做選擇。 仔細回想過去面對比較重大情況;必須做選擇時,竟然發現自己不愛跟從多數人所愛
Thumbnail
由於我是單向操作,沒有作空,真正大空頭來臨或是系統性風險,基本上對散戶而言,保留現金就是最好的避險,所以我的資金調節可以分4階段... 可否不