【面試干貨】數據庫樂觀鎖,悲觀鎖的區別,怎么實現

【面試干貨】數據庫樂觀鎖,悲觀鎖的區別,怎么實現

  • 1、樂觀鎖,悲觀鎖的區別
  • 2、總結


💖The Begin💖點點關注,收藏不迷路💖

1、樂觀鎖,悲觀鎖的區別

  1. 悲觀鎖(Pessimistic Lock)

    定義: 每次去拿數據的時候都認為別人會修改,所以每次在拿數據的時候都會上鎖,這樣別人想拿這個數據就會阻塞掛起直到它拿到鎖

    實現: 傳統的關系型數據庫里邊就用到了很多這種鎖機制,比如行鎖,表鎖,讀鎖,寫鎖等,都是在做操作之前先上鎖

    特點: 適用于寫操作頻繁的場景,但可能會降低并發性能,因為上鎖會阻塞其他操作的進行。

示例代碼(偽代碼):

-- 悲觀鎖示例(以行鎖為例)  
SELECT * FROM table_name WHERE id = 1 FOR UPDATE;  -- 對id為1的行加鎖
  1. 樂觀鎖(Optimistic Lock)

    定義: 每次去拿數據的時候都認為別人不會修改數據,所以不會上鎖,但是在更新的時候會判斷一下在此期間別人有沒有去更新這個數據

    實現版本號機制 (如:為數據表增加一個版本號字段,在更新數據時判斷版本號是否變化)或者時間戳機制(使用數據的最后更新時間戳,在更新時判斷時間戳是否發生變化)是常見的樂觀鎖實現方式。

    特點: 適用于多讀少寫的場景,可以提高系統的整體吞吐量。但如果沖突頻繁,上層應用會不斷重試,降低性能。

示例代碼(偽代碼):

-- 樂觀鎖示例(以版本號為例)  
UPDATE table_name SET column1 = value1, version = version + 1 WHERE id = 1 AND versio

old_version 是之前讀取到的版本號,如果更新操作影響的行數為0,則表示在此期間有其他事務已經修改了數據,需要重試。

2、總結

選擇:

1、根據實際應用場景選擇使用悲觀鎖還是樂觀鎖。 如果寫操作較少,且希望提高系統吞吐量,可以考慮使用樂觀鎖;

2、如果寫操作頻繁,且希望減少數據沖突可以考慮使用悲觀鎖

注意: 在使用樂觀鎖時,需要合理設置重試次數和重試間隔,避免頻繁重試導致性能下降。同時,需要確保在更新數據時能夠正確判斷數據是否被其他事務修改過。

在這里插入圖片描述


💖The End💖點點關注,收藏不迷路💖

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/15464.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/15464.shtml
英文地址,請注明出處:http://en.pswp.cn/web/15464.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

web前端框架設計第十課-組件

web前端框架設計第十課-組件 一.預習筆記 組件:Vue最強大的功能之一 1.局部組件注冊 注意事項:template標簽中只能有一個根元素 2.全局組件的注冊 注意事項:組件名的大小寫需要注意(實踐) 3.案例(查詢框…

Vivado 使用教程(個人總結)

Vivado 是 Xilinx 公司推出的一款用于 FPGA 設計的集成開發環境 (IDE),提供了從設計輸入到實現、驗證、調試和下載的完整流程。本文將詳細介紹 Vivado 的使用方法,包括項目創建、設計輸入、約束文件、綜合與實現、仿真、調試、下載配置等步驟。 一、創建…

設計模式--責任鏈模式

責任鏈模式是一種行為設計模式,它允許將請求沿著處理者鏈進行發送。請求會沿鏈傳遞,直到某個處理者對象負責處理它。這種模式在許多應用場景中非常有用,例如在處理用戶輸入、過濾請求以及實現多級審核時。 應用場景 處理用戶輸入&#xff1…

kafka之consumer參數auto.offset.reset

Kafka的auto.offset.reset 參數是用于指定消費者在啟動時如何處理偏移量(offset)的。這個參數有三個主要的取值:earliest、latest和none。 earliest: 當各分區下有已提交的offset時,從提交的offset開始消費&#xff1b…

HCIP-VLAN綜合實驗

一、實驗拓撲 二、實驗要求 1、pc1和pc3所在接口為access;屬于vlan 2; PC2/PC4/PC5/PC6處于同一網段’其中PC2可以訪問PC4/PC5/PC6; PC4可以訪問PC6;PC5不能訪問PC6; 2、PC1/PC3與PC2/PC4/PC5/PC6不在同一個網段; 3、所有PC通過DHCP獲取IP…

棧和隊列的應用-計算器實例

‘’‘ (11 3) 2 -5 順序存儲棧來實現 ’‘’ sqstack.h #ifndef SQSTACK_H__ #define SQSTACK_H__ #define MAXSIZE 32 typedef int datatype typedef struct node_st {datatype data[MAXSIZE]; int top;}sqstack;sqstack *st_create(void); int s…

閑話 .NET(5):.NET Core 有什么優勢?

前言 .NET Core 并不是 .NET FrameWork 的升級版,它是一個為滿足新一代的軟件設計要求而從頭重新開發的開發框架和平臺,所以它沒有 .NET FrameWork 的歷史包袱,相對于 .NET FrameWork,它具備很多優勢。 .NET Core 有哪些優勢&am…

智算中心帶寬漫談 -- 開篇

隱秘的角落 帶寬對高性能計算是一個永恒的話題,本質上,帶寬即數據交換的速率,單位時間的傳輸數據越多,帶寬就越高,但對高性能計算來說,對高帶寬的渴求永無止境,好比宏觀現實世界中的車道&#…

QT實現線程的四種方式(QThread、QRunnable和QThreadPool、QObject、QtConcurrent)

在當今高性能計算需求日益增長的背景下,多線程編程已成為提升應用性能的重要手段。Qt框架,作為一個功能全面、跨平臺的C++應用程序開發工具包,為我們提供了多種多線程實現方案。本文將介紹QThread類在Qt多線程編程中的應用,以及如何通過QRunnable和QThreadPool、QObject的m…

C# GDI+ 繪制文字不同的操作系統渲染文字大小不同

一、C# GDI 繪制文字不同的操作系統渲染文字大小不同 原因:使用Font 字體的時候,沒有指定字體渲染的單位。 不同系統的默認字體單位會不同。 二、解決方案: 在指定字體的時候,指定字體大小,同時也要設置字體的單位 …

sqlserver 創建表,列及表,列描述

-- 創建表 CREATE TABLE Employees (EmployeeID INT PRIMARY KEY,EmployeeName NVARCHAR(100),EmployeeEmail NVARCHAR(100) );-- 為表添加描述 EXEC sp_addextendedproperty name NMS_Description, value N員工信息表, level0type NSchema, level0name dbo, level1type N…

springboot整合kkFileView部署,前端使用

前言: 官方文檔:https://kkfileview.keking.cn/zh-cn/docs/production.html docker方式或加入星球獲取發行包直接獲取啟動,無需以下步驟: 拉取鏡像# 網絡環境方便訪問docker中央倉庫 docker pull keking/kkfileview:4.1.0# 網…

pytest框架的代碼如何用vscode進行debug

{"version": "0.2.0","configurations": [{"name": "Python: Run My Module", // 配置名稱,將在調試配置下拉列表中顯示"type": "debugpy", // 調試類型,這里是Python"requ…

二元關系表示

一、二元關系的定義和表示 什么是二元關系?對集合A和B,A\timesB的任意子集R為A到B的一個二元關系。當AB時,A\timesA的任一子集R稱為A上的一個二元關系。在不引起誤解的情況下,二元關系可簡稱關系。 若|A|m,|B|n,則A到…

常用字體映射字典

表格形式 英文字體名稱中文字體名稱SimSun宋體SimHei黑體KaiTi楷體FangSong仿宋YouYuan幼圓LiSu隸書NSimSun新宋體SimSun-ExtB宋體-ExtBFangSong_GB2312仿宋_GB2312KaiTi_GB2312楷體_GB2312Microsoft YaHei微軟雅黑Microsoft JhengHei微軟正黑體STXihei華文細黑STKaiti華文楷體…

手機版AI寫作軟件哪個好用?5款AI寫作軟件分享

在這個快節湊的時代,人們對于高效、便捷的創作方式很是追求。尤其是在人工智能技術發展迅速的今天,AI寫作軟件的出現,讓很多自媒體創作者都會想到在手機上面進內容創作,這樣不僅能提高工作效率,而且工作的自由度會更高…

自動化運維(AIOps): 現代IT管理的革命

在數字化時代,企業的 IT 系統變得愈加復雜。從云計算到大數據,從物聯網到人工智能,技術的飛速發展使得企業面臨前所未有的挑戰。這種復雜性不僅體現在數據量和數據流的增加上,還包括高成本和高錯誤率的運維需求。在此背景下&#…

基于51單片機的盆栽自動澆花系統

一.硬件方案 工作原理是濕度傳感器將采集到的數據直接傳送到ADC0832的IN端作為輸入的模擬信號。選用濕度傳感器和AD轉換,電路內部包含有濕度采集、AD轉換、單片機譯碼顯示等功能。單片機需要采集數據時,發出指令啟動A/D轉換器工作,ADC0832根…

Hive 變量定義與引用

文章目錄 1.背景2.Hive 變量命名空間查看變量設置變量引用變量 參考文獻 1.背景 在書寫 Hive SQL 時,有時需要將重復出現的值從 SQL 分離出來,以變量的方式表示和引用。 設置變量和引用變量可以帶來以下幾個好處: 簡化查詢語句:…

Android 實現豎排文本(垂直方向顯示)

Android 實現豎排文本-垂直方向顯示 前言效果圖代碼實現方式一 Custom View1. 自定義視圖 VerticalTextView2. 在xml布局文件中使用3. 設置文本內容 方式二 使用 TextView 的 rotation屬性方式三 使用帶有跨距文本的TextView1. 自定義視圖 VerticalTextView2. 在xml布局文件中使…