国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

數(shù)據(jù)庫系統(tǒng)-并發(fā)控制

這篇具有很好參考價(jià)值的文章主要介紹了數(shù)據(jù)庫系統(tǒng)-并發(fā)控制。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

一、為什么要并發(fā)控制

多端操作同一個(gè)數(shù)據(jù)庫的問題
數(shù)據(jù)庫系統(tǒng)-并發(fā)控制

1.2 并發(fā)控制解決的問題

1.2.1 臟讀

新增的是行
數(shù)據(jù)庫系統(tǒng)-并發(fā)控制

1.2.2 幻讀

修改的是原有數(shù)據(jù)的記錄數(shù)據(jù)庫系統(tǒng)-并發(fā)控制

1.2.3 不可重復(fù)讀

數(shù)據(jù)庫系統(tǒng)-并發(fā)控制

1.2.4 數(shù)據(jù)丟失問題

數(shù)據(jù)庫系統(tǒng)-并發(fā)控制
并發(fā)控制、事務(wù)、封鎖 是DBMS實(shí)現(xiàn)并發(fā)控制的核心技術(shù)
數(shù)據(jù)庫系統(tǒng)-并發(fā)控制

二、事務(wù)調(diào)度及可串行性

2.1 事務(wù)

DBMS提供的控制數(shù)據(jù)操作的一種手段,:應(yīng)用程序員將一系列的數(shù)據(jù)庫操作組合在一起為一個(gè)整體進(jìn)行操作和控制,保證了一致性

2.1.1 事務(wù)的宏觀

事務(wù)的宏觀(應(yīng)用程序員看到的事務(wù)):一個(gè)存取或改變數(shù)據(jù)庫內(nèi)容的程序的一次執(zhí)行,或者說一個(gè)SQL組合的一次執(zhí)行被看做一個(gè)事務(wù)。
由應(yīng)用程序提出,有開始和結(jié)束,結(jié)束前需要提交或者撤銷

Begin Transcation
	exec sql...
	...
	exec sql...
	exec sql commit work | exec sql rollback work
End Transcation

一段程序語句中,可能會存在執(zhí)行循環(huán),SQL引出事務(wù),到Commit/Rollback結(jié)束事務(wù),每次重復(fù)執(zhí)行都會產(chǎn)生一個(gè)事務(wù)
數(shù)據(jù)庫系統(tǒng)-并發(fā)控制

2.1.2 事務(wù)的微觀

DBMS看到的事務(wù):對數(shù)據(jù)庫的一系列基本操作(讀寫)的一個(gè)整體性執(zhí)行

事務(wù)的并發(fā)執(zhí)行: 多個(gè)事務(wù)從宏觀上看是并行執(zhí)行的,但是微觀上的基本操作(R、W)是可以交叉執(zhí)行的

2.1.3 事務(wù)的特性 ACID

數(shù)據(jù)庫系統(tǒng)-并發(fā)控制

原子性Atomicity:一組SQL操作是不可再分的
一致性Consistency:事務(wù)開始和結(jié)束時(shí),數(shù)據(jù)庫的完整性約束都存在。比如:每個(gè)銀行賬戶>0 , 事務(wù)執(zhí)行前后都應(yīng)該>0
隔離性Isolation:多個(gè)并發(fā)事務(wù)之間的操作應(yīng)該是互不干擾,每個(gè)事務(wù)獨(dú)立運(yùn)行。
持久性:一旦提交,結(jié)果就應(yīng)該永久保存在數(shù)據(jù)庫中。及時(shí)出現(xiàn)故障也不能丟失數(shù)據(jù)

數(shù)據(jù)庫系統(tǒng)-并發(fā)控制

2.2 事務(wù)調(diào)度與可串行性

事務(wù)調(diào)度:一組事務(wù)的基本步驟(R\W\其他控制操作加鎖解鎖等)的一種執(zhí)行順序稱為對這組事務(wù)的一個(gè)調(diào)度。
并發(fā)(并行)調(diào)度:多個(gè)事務(wù)從宏觀上看上去是并行執(zhí)行的,但是微觀上的基本操作(RW)是可以交叉執(zhí)行的

數(shù)據(jù)庫系統(tǒng)-并發(fā)控制

并發(fā)調(diào)度的正確性:多個(gè)事務(wù)并發(fā)執(zhí)行結(jié)果 === 每個(gè)事物依次執(zhí)行的結(jié)果

并發(fā)調(diào)度的可串行性:一個(gè)調(diào)度的影響 === 某幾個(gè)串行調(diào)度相同,則說 可串行化的 或 具有可串行性

數(shù)據(jù)庫系統(tǒng)-并發(fā)控制
沖突:調(diào)度中一一對連續(xù)的動(dòng)作,如果他們順序交換,那么涉及的事務(wù)中必須要改變。
有沖突的兩個(gè)操作是不能交換次序的,沒有沖突的兩個(gè)事物是可以交換的。
數(shù)據(jù)庫系統(tǒng)-并發(fā)控制

事務(wù)可串行化是指對于任何兩個(gè)或多個(gè)事務(wù),
如果它們并發(fā)執(zhí)行的結(jié)果和以某個(gè)序列化的順序執(zhí)行的結(jié)果是一樣的,
那么這些事務(wù)就是可串行化的。 
 
沖突可串行化是指對于任何兩個(gè)或多個(gè)事務(wù),
如果它們并發(fā)執(zhí)行的結(jié)果和以某個(gè)序列化的順序執(zhí)行的結(jié)果是一樣的,
且它們之間任何一個(gè)數(shù)據(jù)項(xiàng)的讀寫操作之間都沒有沖突,
那么這些事務(wù)就是沖突可串行化的。 
 
可串行化和沖突可串行化的區(qū)別在于,
可串行化只是要求不同的事務(wù)在并發(fā)執(zhí)行和串行執(zhí)行的結(jié)果是一致的,
而沖突可串行化要求不同事務(wù)之間的數(shù)據(jù)訪問順序不能引起沖突。

2.3 沖突可串行化判定

  1. 構(gòu)造前驅(qū)圖(有向圖)
  2. 節(jié)點(diǎn)是每一個(gè)事物T。如果Ti的一個(gè)操作和Tj的一個(gè)操作發(fā)生沖突,Ti在Tj前面,則繪制一條邊,由Ti指向Tj
  3. 測試檢查:如果此有向圖沒沒有環(huán),那么沖突就是可串行的

數(shù)據(jù)庫系統(tǒng)-并發(fā)控制

三、基于封鎖的并發(fā)控制方法

鎖 是控制并發(fā)的一種手段

  • 每一數(shù)據(jù)元素都有唯一的鎖
  • 事務(wù)讀寫前,要獲取鎖
  • 后面的事務(wù)需要等待鎖釋放
  • 事務(wù)處理完成后需要釋放鎖

數(shù)據(jù)庫系統(tǒng)-并發(fā)控制數(shù)據(jù)庫系統(tǒng)-并發(fā)控制
數(shù)據(jù)庫系統(tǒng)-并發(fā)控制
數(shù)據(jù)庫系統(tǒng)-并發(fā)控制

3.1 鎖的類型

3.1.1 共享鎖Shared Lock

多個(gè)事務(wù)可以一起用共享鎖,只能讀取,不能修改
當(dāng)數(shù)據(jù)有了排它鎖,就不能再加共享鎖

3.1.2 排它鎖Exclusive Lock

一個(gè)事務(wù)獨(dú)占排它鎖,可以修改

3.1.3 意向共享鎖 Intent Shared Lock

輔助鎖,用來表明想要加上共享鎖

3.1.4 意向排他鎖 Intent Exclusive Lock

輔助鎖,用來表明想要加上排它鎖

3.1.5 更新鎖Update Lock

也稱為 共享更新鎖,是一種介于 共享鎖&排它鎖 之間的鎖
允許多個(gè)事務(wù)讀取資源,但只允許一個(gè)事務(wù)進(jìn)行修改
同樣的,只能有一個(gè)更新鎖,有了 更行鎖 就不能加 共享鎖

3.1.6 增量鎖Incremental Lock

增量的 對 數(shù)據(jù)進(jìn)行 lock & unlock
從而減少了鎖沖突的概率,提升了并發(fā)性能
通常用于高并發(fā)場景下的資源訪問控制

3.1.7 行級鎖Row Lock

只鎖定一行行的數(shù)據(jù),而不鎖定表的數(shù)據(jù)

3.1.8 表級鎖Row Lock

鎖定整個(gè)表

3.1.9 鎖的優(yōu)先級

排它鎖 > 意向排它鎖 > 意向共享鎖 > 共享鎖
行級鎖 > 表級鎖

3.2 加鎖解鎖時(shí)機(jī)

數(shù)據(jù)庫系統(tǒng)-并發(fā)控制

3.3 SQL隔離級別

3.3.1 讀未提交 read uncommitted 0

可以讀取其他事務(wù)未提交的數(shù)據(jù),也就是允許臟讀
最低的隔離級別,并發(fā)性最高,但是會導(dǎo)致數(shù)據(jù)不一致問題

3.3.2 讀已提交 read committed 1

只能讀取已經(jīng)提交的數(shù)據(jù),避免了臟讀
但是在并發(fā),多個(gè)事務(wù)同時(shí)訪問一個(gè)數(shù)據(jù),可能會出現(xiàn)重復(fù)讀取的數(shù)據(jù)

3.3.3 可重復(fù)讀 repeatable read 2

讀取前,先加鎖,其他事務(wù)不能修改
避免了重復(fù)讀和臟讀

3.3.4 可串行化 serializable 3

RW都會加鎖,完全避免了并發(fā)
性能下降

數(shù)據(jù)庫系統(tǒng)-并發(fā)控制

封鎖的粒度
數(shù)據(jù)庫系統(tǒng)-并發(fā)控制

屬性值 —> 元祖 —> 元祖集合 —> 整個(gè)關(guān)系 —> 整個(gè)DB
索引項(xiàng) —> 整個(gè)索引

數(shù)據(jù)庫系統(tǒng)-并發(fā)控制

3.4 封鎖協(xié)議級別

3.4.1 一級封鎖協(xié)議

修改前必須加X鎖,結(jié)束(commit or rollback) 才釋放鎖
避免丟失修改

3.4.2 二級封鎖協(xié)議

在一級的基礎(chǔ)上 + 事務(wù)T在讀取數(shù)據(jù)R之前必須先對其加S鎖,讀完后即可釋放S鎖。
讀“臟”數(shù)據(jù)

3.4.3 三級封鎖協(xié)議

在一級的基礎(chǔ)上 + 事務(wù)T在讀取數(shù)據(jù)R之前必須先對其加S鎖,直到事務(wù)結(jié)束才釋放。
不可重復(fù)讀

3.5 兩段鎖協(xié)議

加鎖階段Growing Pahse & 解鎖階段Shrinking Phase
訪問前先申請鎖
在提交前,所有的鎖都不能釋放
在加鎖階段,任何事務(wù)不能訪問已經(jīng)加鎖的資源

銀行轉(zhuǎn)賬,雙方賬戶都鎖定,轉(zhuǎn)賬才開始

數(shù)據(jù)庫系統(tǒng)-并發(fā)控制

四、基于時(shí)間戳的并發(fā)控制方法

4.1 基于時(shí)間戳順序的調(diào)度規(guī)則

基于時(shí)間戳順序的調(diào)度規(guī)則是根據(jù)事務(wù)提交的時(shí)間戳順序進(jìn)行調(diào)度,即按照時(shí)間戳先后順序來決定事務(wù)執(zhí)行的順序

數(shù)據(jù)庫系統(tǒng)-并發(fā)控制
時(shí)間戳相同,就會導(dǎo)致死鎖
此外,如果有多個(gè)事務(wù)同時(shí)競爭多個(gè)數(shù)據(jù)項(xiàng),并且它們的時(shí)間戳相互依存,那么就可能出現(xiàn)死鎖的情況。例如,如果事務(wù)1需要修改數(shù)據(jù)項(xiàng)A和B,而事務(wù)2需要修改數(shù)據(jù)項(xiàng)B和C,而時(shí)間戳1 < 時(shí)間戳2,那么事務(wù)1會先獲得A和B的鎖,但是無法獲得C的鎖,而事務(wù)2會先獲得C的鎖,但是無法獲得B的鎖,從而導(dǎo)致死鎖的情況。

4.2 基于時(shí)間戳調(diào)度托馬斯規(guī)則

托馬斯規(guī)則要求事務(wù)按照它們的時(shí)間戳順序提交,如果一個(gè)事務(wù)想要提交,但是有其他事務(wù)正在等待或已經(jīng)占據(jù)它要修改的數(shù)據(jù)項(xiàng),那么它必須等待所有占據(jù)該數(shù)據(jù)項(xiàng)的其他事務(wù)都提交或回滾后才能提交。托馬斯規(guī)則的核心思想是通過強(qiáng)制事務(wù)按照一定的順序提交,來保證不會出現(xiàn)死鎖的情況。

數(shù)據(jù)庫系統(tǒng)-并發(fā)控制

五、基于有效性確認(rèn)的并發(fā)控制方法

事務(wù)操作數(shù)據(jù)前,先確認(rèn)沒有其他事務(wù)正在操作

基于有效性確認(rèn)的并發(fā)控制方法可以保證數(shù)據(jù)庫的一致性和完整性,但它也會帶來一定的性能開銷,因?yàn)樾枰獙γ總€(gè)事務(wù)所涉及到的數(shù)據(jù)項(xiàng)進(jìn)行確認(rèn)。此外,如果事務(wù)之間的競爭比較激烈,那么可能會導(dǎo)致較高的并發(fā)沖突率,影響系統(tǒng)的響應(yīng)時(shí)間和處理能力。因此,在實(shí)際應(yīng)用中,需要綜合考慮并發(fā)控制方法的安全性和效率,選擇合適的方法來滿足系統(tǒng)的需求。

數(shù)據(jù)庫系統(tǒng)-并發(fā)控制文章來源地址http://www.zghlxwxcb.cn/news/detail-429647.html

到了這里,關(guān)于數(shù)據(jù)庫系統(tǒng)-并發(fā)控制的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 為什么說PostgreSQL是面向?qū)ο蟮臄?shù)據(jù)庫?

    PostgreSQL 官方宣稱它是世界上最先進(jìn)的開源對象-關(guān)系型數(shù)據(jù)庫管理系統(tǒng)(ORDBMS)。相信大家對于關(guān)系型數(shù)據(jù)庫并不陌生,它基于關(guān)系模型(由行和列組成的二維表),定義了完整性約束并且使用 SQL 作為操作語言。 不過今天我們的主題不是關(guān)系模型,而是 PostgreSQL 提供的面向

    2024年03月25日
    瀏覽(26)
  • 為什么要學(xué)MySQL數(shù)據(jù)庫,它有什么用?

    為什么要學(xué)MySQL數(shù)據(jù)庫,它有什么用?

    隨著互聯(lián)網(wǎng)技術(shù)的高速發(fā)展,預(yù)計(jì)2020 年底全世界網(wǎng)民的數(shù)量將達(dá)到 50 億。網(wǎng)民數(shù)量的增加帶動(dòng)了網(wǎng)上購物、微博,網(wǎng)絡(luò)視頻等產(chǎn)業(yè)的發(fā)展。那么,隨之而來的就是龐大的網(wǎng)絡(luò)數(shù)據(jù)量。 大量的數(shù)據(jù)正在不斷產(chǎn)生,那么如何安全有效地存儲、檢索,管理它們呢?于是對數(shù)據(jù)的有

    2024年02月15日
    瀏覽(32)
  • 公司為什么選擇云數(shù)據(jù)庫?它的魅力到底是什么!

    亞馬遜云科技提供了100余種產(chǎn)品免費(fèi)套餐。其中,計(jì)算資源Amazon EC2首年12個(gè)月免費(fèi),750小時(shí)/月;存儲資源 Amazon S3 首年12個(gè)月免費(fèi),5GB標(biāo)準(zhǔn)存儲容量;數(shù)據(jù)庫資源 Amazon RDS 首年12個(gè)月免費(fèi),750小時(shí);Amazon Dynamo DB 25GB存儲容量 永久免費(fèi)。) 談到數(shù)據(jù)庫想必我們都不陌生,其中主流

    2024年02月04日
    瀏覽(24)
  • 數(shù)據(jù)庫三大范式是什么,又為什么要反范式?

    數(shù)據(jù)庫三大范式是什么,又為什么要反范式?

    ??作者簡介,黑夜開發(fā)者,CSDN領(lǐng)軍人物,全棧領(lǐng)域優(yōu)質(zhì)創(chuàng)作者?,CSDN博客專家,阿里云社區(qū)專家博主,2023年6月CSDN上海賽道top4。 ??數(shù)年電商行業(yè)從業(yè)經(jīng)驗(yàn),歷任核心研發(fā)工程師,項(xiàng)目技術(shù)負(fù)責(zé)人。 ??本文已收錄于PHP專欄:MySQL的100個(gè)知識點(diǎn)。 ??歡迎 ??點(diǎn)贊?評論?收

    2024年02月11日
    瀏覽(29)
  • Elasticsearch:什么是向量和向量存儲數(shù)據(jù)庫,我們?yōu)槭裁搓P(guān)心?

    Elasticsearch:什么是向量和向量存儲數(shù)據(jù)庫,我們?yōu)槭裁搓P(guān)心?

    Elasticsearch 從 7.3 版本開始支持向量搜索。從 8.0 開始支持帶有 HNSW 的 ANN 向量搜索。目前 Elasticsearch 已經(jīng)是全球下載量最多的向量數(shù)據(jù)庫。它允許使用密集向量和向量比較來搜索文檔。 向量搜索在人工智能和機(jī)器學(xué)習(xí)領(lǐng)域有許多重要的應(yīng)用。 有效存儲和檢索向量的數(shù)據(jù)庫對于

    2024年02月08日
    瀏覽(31)
  • 為什么數(shù)據(jù)庫要允許沒有主鍵的表存在

    在數(shù)據(jù)庫設(shè)計(jì)中,主鍵是一個(gè)關(guān)鍵概念,用于唯一標(biāo)識數(shù)據(jù)庫表中的每一行數(shù)據(jù)。然而,有時(shí)候數(shù)據(jù)庫允許沒有主鍵的表存在的情況,這可能會引起一些爭議和疑問。本文將探討為什么數(shù)據(jù)庫允許沒有主鍵的表以及相關(guān)的考慮因素。 主鍵在數(shù)據(jù)庫中具有以下作用: 唯一標(biāo)識

    2024年02月08日
    瀏覽(31)
  • mysql面試題30:什么是數(shù)據(jù)庫連接池、應(yīng)用程序和數(shù)據(jù)庫建立連接的過程、為什么需要數(shù)據(jù)庫連接池、你知道哪些數(shù)據(jù)庫連接池

    mysql面試題30:什么是數(shù)據(jù)庫連接池、應(yīng)用程序和數(shù)據(jù)庫建立連接的過程、為什么需要數(shù)據(jù)庫連接池、你知道哪些數(shù)據(jù)庫連接池

    該文章專注于面試,面試只要回答關(guān)鍵點(diǎn)即可,不需要對框架有非常深入的回答,如果你想應(yīng)付面試,是足夠了,抓住關(guān)鍵點(diǎn) 數(shù)據(jù)庫連接池是一種用于管理和復(fù)用數(shù)據(jù)庫連接的技術(shù)。它是在應(yīng)用程序和數(shù)據(jù)庫之間建立一組數(shù)據(jù)庫連接,并以池的形式存儲起來,每當(dāng)應(yīng)用程序需

    2024年02月07日
    瀏覽(31)
  • 數(shù)據(jù)庫——Redis 沒有使用多線程?為什么不使用多線程?

    數(shù)據(jù)庫——Redis 沒有使用多線程?為什么不使用多線程?

    雖然說 Redis 是單線程模型,但是, 實(shí)際上, Redis 在 4.0 之后的版本中就已經(jīng)加入了對多線程的支持。 不過,Redis 4.0 增加的多線程主要是針對一些大鍵值對的刪除操作的命令,使用這些命令就會使用主處理之外的其他線程來“異步處理”。 大體上來說, Redis 6.0 之前主要還是

    2024年02月11日
    瀏覽(31)
  • 數(shù)據(jù)庫為什么使用B+樹而不是B樹做索引

    數(shù)據(jù)庫為什么使用B+樹而不是B樹做索引

    ??作者簡介,黑夜開發(fā)者,CSDN領(lǐng)軍人物,全棧領(lǐng)域優(yōu)質(zhì)創(chuàng)作者?,CSDN博客專家,阿里云社區(qū)專家博主,2023年6月CSDN上海賽道top4。 ??數(shù)年電商行業(yè)從業(yè)經(jīng)驗(yàn),歷任核心研發(fā)工程師,項(xiàng)目技術(shù)負(fù)責(zé)人。 ??本文已收錄于PHP專欄:MySQL的100個(gè)知識點(diǎn)。 ??歡迎 ??點(diǎn)贊?評論?收

    2024年02月10日
    瀏覽(23)
  • Facebook 用戶量十分龐大,為什么還使用 MySQL 數(shù)據(jù)庫?

    Facebook 用戶量十分龐大,為什么還使用 MySQL 數(shù)據(jù)庫?

    當(dāng)談到社交媒體巨頭Facebook時(shí),我們立刻想到的是其龐大的用戶基礎(chǔ)和每日海量的數(shù)據(jù)流。然而,您可能會驚訝地發(fā)現(xiàn),盡管面對如此巨大的規(guī)模,F(xiàn)acebook 仍然選擇使用 MySQL 數(shù)據(jù)庫作為其核心的數(shù)據(jù)存儲和管理系統(tǒng)。 為什么Facebook沒有選擇其他更強(qiáng)大或更高級的數(shù)據(jù)庫系統(tǒng)?

    2024年02月04日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包