第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

b/s的并發(fā)事務(wù)控制

b/s的并發(fā)事務(wù)控制

動(dòng)漫人物 2018-12-06 11:42:31
簡(jiǎn)單三層,在業(yè)務(wù)層調(diào)用數(shù)據(jù)訪(fǎng)問(wèn)層的UploadModel(Entity)方法更新模型 UploadModel拼接一個(gè)形似update model (字段1,字段2........) values (參數(shù)1,參數(shù)2.....) 現(xiàn)在業(yè)務(wù)增多后經(jīng)常會(huì)有兩個(gè)請(qǐng)求同時(shí)訪(fǎng)問(wèn),在執(zhí)行UploadModel方法時(shí)獲取的相同Entity,在執(zhí)行完UploadModel后后一個(gè)執(zhí)行的就把前一個(gè)執(zhí)行結(jié)果覆蓋 后來(lái)在在拼接的語(yǔ)句中加入了一個(gè)時(shí)間戳判斷 where timestamp=@timestamp 這樣做避免掉了前面提到的bug,但是卻經(jīng)常提示更新失敗。 大家有沒(méi)有更好的方法?
查看完整描述

3 回答

?
侃侃爾雅

TA貢獻(xiàn)1801條經(jīng)驗(yàn) 獲得超16個(gè)贊

并發(fā)更新方式有兩種: 一種是悲觀(guān)并發(fā)(pessimistic?concurrency)。就是先鎖定數(shù)據(jù),再讀取數(shù)據(jù),一致后再更新,然后解鎖。(可能需要在鎖定、讀取數(shù)據(jù)后先和本地?cái)?shù)據(jù)比較,如果不一致先更新本地?cái)?shù)據(jù))。這樣通過(guò)鎖定保證了更新的數(shù)據(jù)是最新的版本。鎖定可以通過(guò)數(shù)據(jù)庫(kù)提供的行鎖定(甚至是表鎖定)功能,或者是根據(jù)自己的業(yè)務(wù)邏輯自己做一個(gè)鎖定表來(lái)處理。 另一種是樂(lè)觀(guān)并發(fā)(optimistic concurrency)。就是不需要用鎖,而是使用版本戳,比如sql server的timestamp類(lèi)型字段。這樣就可以和本地的數(shù)據(jù)的版本進(jìn)行比較,不一致則更新失敗。失敗后需要自己根據(jù)業(yè)務(wù)邏輯來(lái)處理,有三種處理方式,一種是server win,就是以數(shù)據(jù)庫(kù)當(dāng)前狀態(tài)為準(zhǔn),本次更新失敗。第二種是client win,就是忽略版本戳再次提交,覆蓋掉之前的版本。第三種是merge,需要讀最新數(shù)據(jù),根據(jù)業(yè)務(wù)來(lái)和失敗的提交合并,然后在更新數(shù)據(jù)。這里后兩種處理方式在更新的時(shí)候還是可能會(huì)失敗,可能需要根據(jù)業(yè)務(wù)來(lái)設(shè)計(jì)重試的次數(shù),和最終失敗的處理。 悲觀(guān)并發(fā)的邏輯更容易寫(xiě),但是由于鎖定,性能會(huì)降低。樂(lè)觀(guān)并發(fā)需要考慮的情況更多,但是也更靈活。現(xiàn)在一般更多的考慮采用樂(lè)觀(guān)并發(fā)的方式。 像是更新庫(kù)存的業(yè)務(wù),我建議使用樂(lè)觀(guān)并發(fā)(也就是你目前使用的辦法),在失敗處理時(shí)使用merge,就是失敗的時(shí)候先讀最新庫(kù)存,然后根據(jù)業(yè)務(wù)加減,再次提交。這時(shí)仍然可能失敗,要根據(jù)系統(tǒng)的并發(fā)程度來(lái)確定一個(gè)重試次數(shù),比如3次,每次都是先讀最新庫(kù)存,然后根據(jù)業(yè)務(wù)加減,再次提交。如果失敗超過(guò)了重試次數(shù),就放棄這次操作,提示用戶(hù)失敗。 如果再?lài)?yán)格一些,更新庫(kù)存的操作是需要考慮冪等的。就是如果用戶(hù)可以在UI上本應(yīng)該一次提交的地方能夠進(jìn)行多次提交(比如網(wǎng)頁(yè)上刷新提交頁(yè)面),那么多次提交的結(jié)果應(yīng)該和一次提交一致(也就是防止重復(fù)提交)。一般的方法是可提交的頁(yè)面生成時(shí)分配一個(gè)唯一id,提交時(shí)會(huì)同時(shí)提交這個(gè)id,如果提交成功,這個(gè)id就失效了,再次使用這個(gè)id的提交就忽略。
查看完整回答
反對(duì) 回復(fù) 2018-12-09
?
森林海

TA貢獻(xiàn)2011條經(jīng)驗(yàn) 獲得超2個(gè)贊

簡(jiǎn)單地設(shè)置一個(gè)版本號(hào),如 version=1update table set Name='wtf', version+=1 where id=11 and version=1 如果execute 返回的是0 那么就是更新失敗。 返回1 就是更新成功,其實(shí)和樓上兩位說(shuō)的是一樣的。
查看完整回答
反對(duì) 回復(fù) 2018-12-09
  • 3 回答
  • 0 關(guān)注
  • 449 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)