千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

手機(jī)站
千鋒教育

千鋒學(xué)習(xí)站 | 隨時隨地免費(fèi)學(xué)

千鋒教育

掃一掃進(jìn)入千鋒手機(jī)站

領(lǐng)取全套視頻
千鋒教育

關(guān)注千鋒學(xué)習(xí)站小程序
隨時隨地免費(fèi)學(xué)習(xí)課程

當(dāng)前位置:首頁  >  技術(shù)干貨  > 兩個人同時操縱數(shù)據(jù)庫,怎么處理并發(fā)問題?

兩個人同時操縱數(shù)據(jù)庫,怎么處理并發(fā)問題?

來源:千鋒教育
發(fā)布人:xqq
時間: 2023-10-13 12:16:18 1697170578

一、兩個人同時操縱數(shù)據(jù)庫,怎么處理并發(fā)問題

從數(shù)據(jù)庫層面上,有三種解決方式:

1.悲觀鎖

select XXX from 商品庫存表 for update 。

用戶A 和B 同時操作一個商品的庫存,數(shù)據(jù)庫層面上,必有一個先后順序。

先執(zhí)行select XXX for update 的,會得到數(shù)據(jù)庫層面上的鎖。 后到的,程序會阻塞在這一句,直到前一個釋放鎖。

壞處是 系統(tǒng)并發(fā)數(shù)到此處會急劇減小。畢竟 只能有一個用戶操作,其他人都要等著。

2.樂觀鎖

名列前茅步: 代碼中查詢商品庫存信息,并校驗(yàn)數(shù)量是否大于1

Product p = getFromDB(productId);

Date lastUpdateTime = p.getUpdateTime;

if(p.total<1){

retrun;

}

第二步:更新庫存

update XXX set total =total – 1 , updateTime=now() where productId = 123 and updateTime = lastUpdateTime ;

關(guān)鍵點(diǎn)在于判斷影響行數(shù)是否為0。

如果為0 ,則說明執(zhí)行sql的時候,已經(jīng)沒庫存了。

核心在于 where 中的 updateTime = lastUpdateTime 。

lastUpdateTime 是上一步我們查詢的修改之前的更新時間。如果其他線程修改并提交了事務(wù),那么數(shù)據(jù)庫此刻的UpdateTime 必定和我們之前查詢出來的不一致,所以where返回空,也不會修改數(shù)據(jù)。

建議使用:

update XXX set total =newTotal , updateTime=now() where productId = 123 and total=oldTotal and updateTime = lastUpdateTime ;

具體原因同3

3.單純的sql語句

update XXX set total =total – 1 where productId = 123 and total>=1 。

本質(zhì)是在 數(shù)據(jù)庫層面 針對 數(shù)量進(jìn)行增量修改(set total =total – 1 ),以及修改的時候,判斷是否可以進(jìn)行庫存扣減( total>=1 )

延伸閱讀:

二、信息抽取是什么

信息抽取(infromation extraction)信息抽取是一種自動化地從半結(jié)構(gòu)化和無結(jié)構(gòu)數(shù)據(jù)中抽取實(shí)體、關(guān)系以及實(shí)體屬性等結(jié)構(gòu)化信息的技術(shù)。關(guān)鍵技術(shù)包括:實(shí)體抽取、關(guān)系抽取和屬性抽取。

1、實(shí)體抽取,也稱為命名實(shí)體識別(named entity recognition,NER),是指從文本數(shù)據(jù)集中自動識別出命名實(shí)體。

當(dāng)前主流技術(shù)為面向開放域(open domain)的實(shí)體抽取。

2、關(guān)系抽取,為了得到語義信息,從相關(guān)語料中提取出實(shí)體之間的關(guān)聯(lián)關(guān)系,通過關(guān)系將實(shí)體聯(lián)系起來,才能夠形成網(wǎng)狀的知識結(jié)構(gòu)。其技術(shù)研究已經(jīng)從早期的“人工構(gòu)造語法和語義規(guī)則”(模式匹配),“統(tǒng)計(jì)機(jī)器學(xué)習(xí)”發(fā)展到“面向開放域的信息抽取方法”與“面向封閉領(lǐng)域的方法”相結(jié)合。

3、屬性抽取,目標(biāo)是從不同信息源中采集特定實(shí)體的屬性信息,如針對某個公眾人物,可以從網(wǎng)絡(luò)公開信息中得到其昵稱、生日、國籍、教育背景等信息。采用數(shù)據(jù)挖掘的方法直接從文本中挖掘?qū)嶓w屬性和屬性值之間的關(guān)系模式,據(jù)此實(shí)現(xiàn)對屬性名和屬性值在文本中的定位。

聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
10年以上業(yè)內(nèi)強(qiáng)師集結(jié),手把手帶你蛻變精英
請您保持通訊暢通,專屬學(xué)習(xí)老師24小時內(nèi)將與您1V1溝通
免費(fèi)領(lǐng)取
今日已有369人領(lǐng)取成功
劉同學(xué) 138****2860 剛剛成功領(lǐng)取
王同學(xué) 131****2015 剛剛成功領(lǐng)取
張同學(xué) 133****4652 剛剛成功領(lǐng)取
李同學(xué) 135****8607 剛剛成功領(lǐng)取
楊同學(xué) 132****5667 剛剛成功領(lǐng)取
岳同學(xué) 134****6652 剛剛成功領(lǐng)取
梁同學(xué) 157****2950 剛剛成功領(lǐng)取
劉同學(xué) 189****1015 剛剛成功領(lǐng)取
張同學(xué) 155****4678 剛剛成功領(lǐng)取
鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
董同學(xué) 138****2867 剛剛成功領(lǐng)取
周同學(xué) 136****3602 剛剛成功領(lǐng)取
相關(guān)推薦HOT
怎么看待oracle的exadata與share nothing系列的hadoop等,以及優(yōu)缺點(diǎn)相互對比、各自的前途對未來的影?

一、怎么看待oracle的exadata與share nothing系列的hadoop等exadata的架構(gòu)我也仔細(xì)思考過很久,個人愚見,exadata引進(jìn)了部分MPP思想,當(dāng)并非MPP...詳情>>

2023-10-13 13:58:16
MySQL數(shù)據(jù)庫char類型的長度是什么意思?

一、MySQL數(shù)據(jù)庫char類型的長度是什么意思MySQL數(shù)據(jù)庫char類型的長度是指該字段所占用的字節(jié)數(shù)。char數(shù)據(jù)類型是MySQL中固定長度的字符類型。 我...詳情>>

2023-10-13 13:51:32
“數(shù)據(jù)庫”領(lǐng)域里面的“數(shù)據(jù)字典”到底是什么?

一、“數(shù)據(jù)庫”領(lǐng)域里面的“數(shù)據(jù)字典”到底是什么數(shù)據(jù)字典是一個存放有數(shù)據(jù)庫所用的有關(guān)信息,在數(shù)據(jù)庫設(shè)計(jì)的初期將數(shù)據(jù)庫中的各類數(shù)據(jù)的描述集...詳情>>

2023-10-13 13:49:07
微博feed系統(tǒng)的推模式和拉模式的架構(gòu)是怎樣的?

一、微博feed系統(tǒng)的推模式架構(gòu)1、發(fā)布服務(wù)負(fù)責(zé)生成用戶的消息,將消息推送到數(shù)據(jù)發(fā)布中心。2、推送服務(wù)在接收到新消息后,根據(jù)消息的類型和內(nèi)容...詳情>>

2023-10-13 13:28:55
Oracle數(shù)據(jù)庫運(yùn)行越來越慢,應(yīng)該怎么優(yōu)化?

一、Oracle數(shù)據(jù)庫運(yùn)行越來越慢的優(yōu)化方法1、應(yīng)用層優(yōu)化應(yīng)用程序的設(shè)計(jì)和開發(fā)中,可以采用合理的數(shù)據(jù)查詢語句來減少數(shù)據(jù)庫的 I/O 操作次數(shù),例如...詳情>>

2023-10-13 13:27:44
快速通道
久久亚洲中文字幕精品一区四,亚洲日本另类欧美一区二区,久久久久久久这里只有免费费精品,高清国产激情视频在线观看
色多多视频网址在线观看 | 日本免码va在线看免费99 | 洲国产精品一区第一页 | 曰本高清色影视频日本高 | 五月婷婷激情五月 | 在线看免费网站黄 |