處理數(shù)據(jù)庫(kù)互斥鎖的方法和裝置以及分布式系統(tǒng)的制作方法
【專利摘要】本發(fā)明的主要目的是提供一種處理數(shù)據(jù)庫(kù)互斥鎖的方法和裝置,以實(shí)現(xiàn)針對(duì)多個(gè)數(shù)據(jù)庫(kù)的操作在并發(fā)時(shí)的互斥操作;本發(fā)明的另一目的是提供一種分布式系統(tǒng),實(shí)現(xiàn)多個(gè)節(jié)點(diǎn)各自執(zhí)行上述操作時(shí)的互斥操作。本發(fā)明的處理數(shù)據(jù)庫(kù)互斥鎖的方法包括:確定當(dāng)前操作所針對(duì)的多個(gè)數(shù)據(jù)庫(kù)的類型;對(duì)于確定的每個(gè)類型的數(shù)據(jù)庫(kù),生成可執(zhí)行語(yǔ)句,所述可執(zhí)行語(yǔ)句用于獲得適用于該數(shù)據(jù)庫(kù)的互斥鎖;執(zhí)行所述可執(zhí)行語(yǔ)句以使所述當(dāng)前操作獲得所述互斥鎖。
【專利說(shuō)明】處理數(shù)據(jù)庫(kù)互斥鎖的方法和裝置以及分布式系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計(jì)算機(jī)技術(shù),特別地涉及一種處理數(shù)據(jù)庫(kù)互斥鎖的方法和裝置以及分布式系統(tǒng)。
【背景技術(shù)】
[0002]數(shù)據(jù)庫(kù)互斥鎖的主要作用是保證在當(dāng)前存在多個(gè)操作時(shí)數(shù)據(jù)的完整性。在向數(shù)據(jù)庫(kù)的一個(gè)數(shù)據(jù)單元(例如數(shù)據(jù)庫(kù)的一行)進(jìn)行操作時(shí),當(dāng)前操作獲得一個(gè)針對(duì)該數(shù)據(jù)單元的鎖,使其他操作無(wú)法對(duì)該數(shù)據(jù)單元進(jìn)行操作;在當(dāng)前操作完成對(duì)該數(shù)據(jù)單元的操作后,該鎖被釋放,使其他操作可以獲得針對(duì)該數(shù)據(jù)單元的鎖。
[0003]在現(xiàn)實(shí)中,復(fù)雜的應(yīng)用系統(tǒng)往往需要由同一操作針對(duì)多個(gè)數(shù)據(jù)庫(kù)進(jìn)行,例如,從幾個(gè)數(shù)據(jù)庫(kù)中各讀取一部分?jǐn)?shù)據(jù)。對(duì)于這類操作在并發(fā)時(shí)如何實(shí)現(xiàn)互斥操作,現(xiàn)有技術(shù)尚未提供相關(guān)方案;另外,在分布式系統(tǒng)中,對(duì)于多個(gè)節(jié)點(diǎn)各自執(zhí)行的上述操作如何實(shí)現(xiàn)互斥操作,現(xiàn)有技術(shù)也未提供相關(guān)方案。
【發(fā)明內(nèi)容】
[0004]有鑒于此,本發(fā)明的主要目的是提供一種處理數(shù)據(jù)庫(kù)互斥鎖的方法和裝置,以實(shí)現(xiàn)針對(duì)多個(gè)數(shù)據(jù)庫(kù)的操作在并發(fā)時(shí)的互斥操作;本發(fā)明的另一目的是提供一種分布式系統(tǒng),實(shí)現(xiàn)多個(gè)節(jié)點(diǎn)各自執(zhí)行上述操作時(shí)的互斥操作。本發(fā)明的其他目的、特點(diǎn)將結(jié)合實(shí)施例加以描述。
[0005]為實(shí)現(xiàn)上述目的,根據(jù)本發(fā)明的一個(gè)方面,提供了 一種處理數(shù)據(jù)庫(kù)互斥鎖的方法。
[0006]本發(fā)明的處理數(shù)據(jù)庫(kù)互斥鎖的方法包括:確定當(dāng)前操作所針對(duì)的多個(gè)數(shù)據(jù)庫(kù)的類型;對(duì)于確定的每個(gè)類型的數(shù)據(jù)庫(kù),生成可執(zhí)行語(yǔ)句,所述可執(zhí)行語(yǔ)句用于獲得適用于該數(shù)據(jù)庫(kù)的互斥鎖;執(zhí)行所述可執(zhí)行語(yǔ)句以使所述當(dāng)前操作獲得所述互斥鎖。
[0007]可選地,確定當(dāng)前操作所針對(duì)的多個(gè)數(shù)據(jù)庫(kù)的類型的步驟包括:根據(jù)數(shù)據(jù)庫(kù)連接字符串得出當(dāng)前操作所針對(duì)的多個(gè)數(shù)據(jù)庫(kù)的類型。
[0008]可選地,所述可執(zhí)行語(yǔ)句包括標(biāo)注語(yǔ)句和獲取鎖語(yǔ)句,其中:所述標(biāo)注語(yǔ)句用于對(duì)所述當(dāng)前操作所針對(duì)的數(shù)據(jù)單元采用所述互斥鎖的標(biāo)識(shí)進(jìn)行標(biāo)注;所述獲取鎖語(yǔ)句用于獲取互斥鎖,該互斥鎖的標(biāo)識(shí)標(biāo)注了當(dāng)前操作所針對(duì)的數(shù)據(jù)單元。
[0009]可選地,在確定當(dāng)前操作所針對(duì)的多個(gè)數(shù)據(jù)庫(kù)的類型的步驟之前,還包括:為預(yù)設(shè)的互斥鎖集合配置該互斥鎖集合中的所有互斥鎖可獲得的最大數(shù)據(jù)庫(kù)連接數(shù);所述可執(zhí)行語(yǔ)句用于獲得所述互斥鎖集合中的互斥鎖;在執(zhí)行鎖獲取語(yǔ)句之前,判斷所述互斥鎖集合中的所有互斥鎖在當(dāng)前持有的數(shù)據(jù)庫(kù)連接數(shù)是否不大于預(yù)設(shè)值,若是,則執(zhí)行所述鎖獲取語(yǔ)句,否則等待所述數(shù)據(jù)庫(kù)連接數(shù)不大于預(yù)設(shè)值然后再執(zhí)行所述鎖獲取語(yǔ)句。
[0010]可選地,在執(zhí)行鎖獲取語(yǔ)句時(shí),監(jiān)聽(tīng)數(shù)據(jù)庫(kù)提供的鎖等待超時(shí)提示信息,在收到該鎖等待超時(shí)提示信息的情況下,再次執(zhí)行鎖獲取語(yǔ)句。
[0011]可選地,在當(dāng)前操作獲得所述互斥鎖之后,該方法還包括:查看所述當(dāng)前操作所獲得的互斥鎖的狀態(tài),在所述互斥鎖被數(shù)據(jù)庫(kù)刪除的情況下,向連接在該數(shù)據(jù)庫(kù)上的鎖等待對(duì)象發(fā)送提示信息。
[0012]根據(jù)本發(fā)明的另一方面,提供了 一種處理數(shù)據(jù)庫(kù)互斥鎖的裝置。
[0013]本發(fā)明的處理數(shù)據(jù)庫(kù)互斥鎖的裝置包括:識(shí)別模塊,用于確定當(dāng)前操作所針對(duì)的多個(gè)數(shù)據(jù)庫(kù)的類型;語(yǔ)句模塊,用于對(duì)于確定的每個(gè)類型的數(shù)據(jù)庫(kù),生成可執(zhí)行語(yǔ)句,所述可執(zhí)行語(yǔ)句用于獲得適用于該數(shù)據(jù)庫(kù)的互斥鎖;執(zhí)行模塊,用于執(zhí)行所述可執(zhí)行語(yǔ)句以使所述當(dāng)前操作獲得所述互斥鎖。
[0014]可選地,所述識(shí)別模塊還用于根據(jù)數(shù)據(jù)庫(kù)連接字符串得出當(dāng)前操作所針對(duì)的多個(gè)數(shù)據(jù)庫(kù)的類型。
[0015]可選地,所述語(yǔ)句模塊還用于生成標(biāo)注語(yǔ)句和獲取鎖語(yǔ)句,其中:所述標(biāo)注語(yǔ)句用于對(duì)所述當(dāng)前操作所針對(duì)的數(shù)據(jù)單元采用所述互斥鎖的標(biāo)識(shí)進(jìn)行標(biāo)注;所述獲取鎖語(yǔ)句用于獲取互斥鎖,該互斥鎖的標(biāo)識(shí)標(biāo)注了當(dāng)前操作所針對(duì)的數(shù)據(jù)單元。
[0016]可選地,還包括配置模塊,用于為預(yù)設(shè)的互斥鎖集合配置該互斥鎖集合中的所有互斥鎖可獲得的最大數(shù)據(jù)庫(kù)連接數(shù);所述語(yǔ)句模塊還用于生成用于獲得所述互斥鎖集合中的互斥鎖;所述執(zhí)行模塊還用于在執(zhí)行鎖獲取語(yǔ)句之前,判斷所述互斥鎖集合中的所有互斥鎖在當(dāng)前持有的數(shù)據(jù)庫(kù)連接數(shù)是否不大于預(yù)設(shè)值,若是,則執(zhí)行所述鎖獲取語(yǔ)句,否則等待所述數(shù)據(jù)庫(kù)連接數(shù)不大于預(yù)設(shè)值然后再執(zhí)行所述鎖獲取語(yǔ)句。
[0017]可選地,所述執(zhí)行模塊還用于在執(zhí)行鎖獲取語(yǔ)句時(shí),監(jiān)聽(tīng)數(shù)據(jù)庫(kù)提供的鎖等待超時(shí)提示信息,在收到該鎖等待超時(shí)提示信息的情況下,再次執(zhí)行鎖獲取語(yǔ)句。
[0018]可選地,還包括查看模塊,用于在當(dāng)前操作獲得所述互斥鎖之后,查看所述當(dāng)前操作所獲得的互斥鎖的狀態(tài),在所述互斥鎖被數(shù)據(jù)庫(kù)刪除的情況下,向連接在該數(shù)據(jù)庫(kù)上的鎖等待對(duì)象發(fā)送提不/[目息。
[0019]根據(jù)本發(fā)明的又一方面,提供了一種分布式系統(tǒng)。
[0020]本發(fā)明的分布式系統(tǒng)包括多個(gè)節(jié)點(diǎn),各個(gè)所述節(jié)點(diǎn)中設(shè)置有本發(fā)明中的處理數(shù)據(jù)庫(kù)互斥鎖的裝置。
[0021]根據(jù)本發(fā)明的技術(shù)方案,識(shí)別當(dāng)前操作所針對(duì)的數(shù)據(jù)庫(kù)的類型,再生成這些數(shù)據(jù)庫(kù)中的可執(zhí)行語(yǔ)句,能夠?qū)崿F(xiàn)針對(duì)多個(gè)數(shù)據(jù)庫(kù)的操作在并發(fā)時(shí)的互斥操作。利用數(shù)據(jù)庫(kù)的鎖等待超時(shí)的異常提示信息,再次嘗試獲得鎖,有助于避免系統(tǒng)局部死鎖。通過(guò)設(shè)置互斥鎖的最大數(shù)據(jù)庫(kù)連接數(shù),使互斥鎖不至于占用過(guò)多的數(shù)據(jù)庫(kù)連接資源從而影響業(yè)務(wù)系統(tǒng)的運(yùn)行。通過(guò)查看已獲得的互斥鎖的狀態(tài)并且在該互斥鎖被刪除的情況下通知其他鎖等待對(duì)象,便于其他操作及時(shí)獲取鎖。
【專利附圖】
【附圖說(shuō)明】
[0022]附圖用于更好地理解本發(fā)明,不構(gòu)成對(duì)本發(fā)明的不當(dāng)限定。其中:
[0023]圖1是根據(jù)本發(fā)明實(shí)施例的處理數(shù)據(jù)庫(kù)互斥鎖的方法的基本步驟的示意圖;
[0024]圖2是根據(jù)本發(fā)明實(shí)施例的一種處理數(shù)據(jù)庫(kù)互斥鎖的裝置的基本組成部分的示意圖;
[0025]圖3是根據(jù)本發(fā)明實(shí)施例的一種處理數(shù)據(jù)庫(kù)互斥鎖的系統(tǒng)的示意圖;
[0026]圖4是根據(jù)本發(fā)明實(shí)施例的一種獲取互斥鎖的優(yōu)選流程的示意圖?!揪唧w實(shí)施方式】
[0027]以下結(jié)合附圖對(duì)本發(fā)明的示范性實(shí)施例做出說(shuō)明,其中包括本發(fā)明實(shí)施例的各種細(xì)節(jié)以助于理解,應(yīng)當(dāng)將它們認(rèn)為僅僅是示范性的。因此,本領(lǐng)域普通技術(shù)人員應(yīng)當(dāng)認(rèn)識(shí)至IJ,可以對(duì)這里描述的實(shí)施例做出各種改變和修改,而不會(huì)背離本發(fā)明的范圍和精神。同樣,為了清楚和簡(jiǎn)明,以下的描述中省略了對(duì)公知功能和結(jié)構(gòu)的描述。
[0028]本發(fā)明實(shí)施例中的互斥鎖可使用在任何非分布式或分布式項(xiàng)目中,當(dāng)需要保證某些操作一致性的時(shí)候使用。該鎖可在各用使用關(guān)系型數(shù)據(jù)庫(kù)的項(xiàng)目中使用,這里的數(shù)據(jù)庫(kù)例如Mysql, SQL Server, Oracle等。為實(shí)現(xiàn)該鎖,每個(gè)鎖對(duì)象需要持有一個(gè)數(shù)據(jù)庫(kù)連接。這里的鎖具體可以是如下三種不同的鎖:表鎖,行鎖和任務(wù)鎖。在獲得鎖或釋放鎖的過(guò)程當(dāng)中,如果數(shù)據(jù)庫(kù)連接出現(xiàn)異常,將一直等待到連接恢復(fù),然后再進(jìn)行下一步的操作。每一個(gè)鎖需要有一個(gè)唯一的名稱,該名稱在創(chuàng)建鎖的時(shí)候傳入,并且伴隨整個(gè)鎖的生命周期內(nèi)。鎖通過(guò)該名稱來(lái)區(qū)分。不同鎖之間不存在競(jìng)爭(zhēng)動(dòng)作。該鎖的使用至少包含兩個(gè)動(dòng)作,獲得鎖,釋放鎖。未被釋放的鎖,不能被其他線程或進(jìn)程獲得。每個(gè)鎖持有一個(gè)數(shù)據(jù)庫(kù)連接,該連接在鎖釋放的時(shí)候,隨之釋放。在同一進(jìn)程中,所有的鎖單元持有的連接數(shù)包含一個(gè)最大的持有值,當(dāng)所有鎖持有的連接數(shù)到達(dá)一定閾值的時(shí)候,則不能通過(guò)新建一個(gè)鎖來(lái)獲得鎖資源,需要等待其他鎖釋放之后,即可競(jìng)爭(zhēng)獲得鎖。該步驟用于防止鎖占用,消耗過(guò)多的連接資源。
[0029]圖1是根據(jù)本發(fā)明實(shí)施例的處理數(shù)據(jù)庫(kù)互斥鎖的方法的基本步驟的示意圖。該方法可以由分布式系統(tǒng)中的節(jié)點(diǎn)來(lái)執(zhí)行,如圖1所示,主要包括如下的步驟Sll至S13。
[0030]步驟Sll:確定當(dāng)前操作所針對(duì)的多個(gè)數(shù)據(jù)庫(kù)的類型。可以根據(jù)數(shù)據(jù)庫(kù)連接字符串(dburl)得出當(dāng)前操作所針對(duì)的多個(gè)數(shù)據(jù)庫(kù)的類型。
[0031]步驟S12:對(duì)于確定的每個(gè)類型的數(shù)據(jù)庫(kù),生成可執(zhí)行語(yǔ)句。這里的可執(zhí)行語(yǔ)句用于獲得適用于該數(shù)據(jù)庫(kù)的互斥鎖。因?yàn)橐呀?jīng)確定了數(shù)據(jù)庫(kù)的類型,因此可根據(jù)該類型的數(shù)據(jù)庫(kù)的標(biāo)準(zhǔn)語(yǔ)句格式來(lái)生成上述的可執(zhí)行語(yǔ)句。例如針對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)單元(例如一條記錄)進(jìn)行操作,可以先對(duì)該數(shù)據(jù)單元用互斥鎖的標(biāo)識(shí)例如名稱進(jìn)行標(biāo)注,然后按標(biāo)注的標(biāo)識(shí)來(lái)嘗試獲得具有該標(biāo)識(shí)的互斥鎖,這樣,這里的可執(zhí)行語(yǔ)句包括用于對(duì)當(dāng)前操作所針對(duì)的數(shù)據(jù)單元采用互斥鎖的標(biāo)識(shí)進(jìn)行標(biāo)注的語(yǔ)句(以下稱作“標(biāo)注語(yǔ)句”),還包括用于獲取互斥鎖的語(yǔ)句(以下稱作“獲取鎖語(yǔ)句”),獲取的互斥鎖的標(biāo)識(shí)標(biāo)注了當(dāng)前操作所針對(duì)的數(shù)據(jù)單元。
[0032]步驟S13:執(zhí)行上述可執(zhí)行語(yǔ)句以使當(dāng)前操作獲得互斥鎖。可以看出通過(guò)以上步驟的執(zhí)行,識(shí)別當(dāng)前操作所針對(duì)的數(shù)據(jù)庫(kù)的類型,再生成這些數(shù)據(jù)庫(kù)中的可執(zhí)行語(yǔ)句,能夠?qū)崿F(xiàn)針對(duì)多個(gè)數(shù)據(jù)庫(kù)的操作在并發(fā)時(shí)的互斥操作。
[0033]對(duì)于數(shù)據(jù)庫(kù)中的一條記錄,若對(duì)其進(jìn)行多個(gè)操作,則有多個(gè)鎖在該記錄上等待。在執(zhí)行鎖獲取語(yǔ)句時(shí),可以監(jiān)聽(tīng)數(shù)據(jù)庫(kù)提供的鎖等待超時(shí)提示信息,在收到該提示信息的情況下,再將執(zhí)行鎖獲取語(yǔ)句。對(duì)于數(shù)據(jù)庫(kù)而言,在發(fā)生鎖等待超時(shí)后,數(shù)據(jù)庫(kù)會(huì)提供一個(gè)異常提示信息,因此在本發(fā)明實(shí)施例中,可以利用該異常提示信息作為提示,再次嘗試獲得該鎖并且忽略處理該異常提示信息本身,此時(shí)前一個(gè)鎖可能已被釋放或刪除,因此再次嘗試就有可能獲得該鎖,有助于提高鎖獲取的成功率,并且有助于避免系統(tǒng)局部死鎖。[0034]在實(shí)際的應(yīng)用中,鎖使用的數(shù)據(jù)庫(kù)連接往往與業(yè)務(wù)系統(tǒng)采用同一個(gè)連接,在這種方式下,為了使互斥鎖在業(yè)務(wù)系統(tǒng)中不占用過(guò)多的數(shù)據(jù)庫(kù)連接資源,可以預(yù)先設(shè)置一個(gè)互斥鎖集合,然后設(shè)置該互斥鎖集合中所有互斥鎖可獲得的最大數(shù)據(jù)庫(kù)連接數(shù)。可以通過(guò)保存多個(gè)鎖的標(biāo)識(shí)來(lái)設(shè)置互斥鎖集合,在執(zhí)行上述的標(biāo)注語(yǔ)句時(shí),從保存的多個(gè)鎖的標(biāo)識(shí)中提取一個(gè)鎖的標(biāo)識(shí)。這樣,在執(zhí)行鎖獲取語(yǔ)句之前,可以先判斷互斥鎖集合中的所有互斥鎖在當(dāng)前持有的數(shù)據(jù)庫(kù)連接數(shù)是否不大于預(yù)設(shè)值,若是,則執(zhí)行鎖獲取語(yǔ)句,否則等待數(shù)據(jù)庫(kù)連接數(shù)不大于預(yù)設(shè)值然后再執(zhí)行鎖獲取語(yǔ)句。在該互斥鎖集合中的其他已獲取的鎖被釋放時(shí)數(shù)據(jù)庫(kù)連接會(huì)斷開(kāi),由于某些異常例如節(jié)點(diǎn)故障也會(huì)使得數(shù)據(jù)庫(kù)連接斷開(kāi),在例如這些情況下,數(shù)據(jù)庫(kù)連接數(shù)相應(yīng)減小。
[0035]對(duì)于數(shù)據(jù)庫(kù)而言,在某一操作與數(shù)據(jù)庫(kù)的連接斷開(kāi)后,數(shù)據(jù)庫(kù)會(huì)刪除相應(yīng)的鎖。因此在本發(fā)明實(shí)施例中,在當(dāng)前操作獲得鎖之后,可以間隔地查看當(dāng)前操作所獲得的互斥鎖的狀態(tài),在該互斥鎖被數(shù)據(jù)庫(kù)刪除的情況下,向連接在該數(shù)據(jù)庫(kù)上的鎖等待對(duì)象發(fā)送提示信息,這樣其他鎖等待對(duì)象可再次嘗試獲得鎖,從而便于其他操作及時(shí)獲取鎖。
[0036]以下結(jié)合圖2對(duì)本發(fā)明實(shí)施例的處理數(shù)據(jù)庫(kù)互斥鎖的裝置的一種基本結(jié)構(gòu)做出說(shuō)明。圖2是根據(jù)本發(fā)明實(shí)施例的一種處理數(shù)據(jù)庫(kù)互斥鎖的裝置的基本組成部分的示意圖。圖2中的處理數(shù)據(jù)庫(kù)互斥鎖的裝置20可以設(shè)置在分布式系統(tǒng)的節(jié)點(diǎn)中,主要包括識(shí)別模塊21、語(yǔ)句模塊22、以及執(zhí)行模塊23。
[0037]識(shí)別模塊21用于確定當(dāng)前操作所針對(duì)的多個(gè)數(shù)據(jù)庫(kù)的類型;語(yǔ)句模塊22用于對(duì)于確定的每個(gè)類型的數(shù)據(jù)庫(kù),生成可執(zhí)行語(yǔ)句,該可執(zhí)行語(yǔ)句用于獲得適用于該數(shù)據(jù)庫(kù)的互斥鎖;執(zhí)行模塊23用于執(zhí)行可執(zhí)行語(yǔ)句以使當(dāng)前操作獲得該互斥鎖。
[0038]在分布式系統(tǒng)的各個(gè)節(jié)點(diǎn)中設(shè)置處理數(shù)據(jù)庫(kù)互斥鎖的裝置20,因?yàn)閿?shù)據(jù)庫(kù)自身具有鎖等待機(jī)制,所以能夠?qū)崿F(xiàn)多個(gè)節(jié)點(diǎn)對(duì)相同的一個(gè)或多個(gè)數(shù)據(jù)庫(kù)中的相同數(shù)據(jù)單元的互斥操作??梢詫?duì)各個(gè)節(jié)點(diǎn)設(shè)置上述的互斥鎖集合,使各個(gè)節(jié)點(diǎn)不至于被互斥鎖占用過(guò)多的數(shù)據(jù)庫(kù)連接。
[0039]識(shí)別模塊21還可用于根據(jù)數(shù)據(jù)庫(kù)連接字符串得出當(dāng)前操作所針對(duì)的多個(gè)數(shù)據(jù)庫(kù)的類型。
[0040]語(yǔ)句模塊22還可用于生成標(biāo)注語(yǔ)句和獲取鎖語(yǔ)句,其中:標(biāo)注語(yǔ)句用于對(duì)當(dāng)前操作所針對(duì)的數(shù)據(jù)單元采用互斥鎖的標(biāo)識(shí)進(jìn)行標(biāo)注;獲取鎖語(yǔ)句用于獲取互斥鎖,該互斥鎖的標(biāo)識(shí)標(biāo)注了當(dāng)前操作所針對(duì)的數(shù)據(jù)單元。
[0041]處理數(shù)據(jù)庫(kù)互斥鎖的裝置20還可以包括配置模塊(圖中未示出),用于為預(yù)設(shè)的互斥鎖集合配置該互斥鎖集合中的所有互斥鎖可獲得的最大數(shù)據(jù)庫(kù)連接數(shù);語(yǔ)句模塊22還可用于生成用于獲得互斥鎖集合中的互斥鎖;執(zhí)行模塊23還用于在執(zhí)行鎖獲取語(yǔ)句之前,判斷互斥鎖集合中的所有互斥鎖在當(dāng)前持有的數(shù)據(jù)庫(kù)連接數(shù)是否不大于預(yù)設(shè)值,若是,則執(zhí)行上述鎖獲取語(yǔ)句,否則等待數(shù)據(jù)庫(kù)連接數(shù)不大于預(yù)設(shè)值然后再執(zhí)行上述鎖獲取語(yǔ)句。
[0042]執(zhí)行模塊23還可用于在執(zhí)行鎖獲取語(yǔ)句時(shí),監(jiān)聽(tīng)數(shù)據(jù)庫(kù)提供的鎖等待超時(shí)提示信息,在收到該鎖等待超時(shí)提示信息的情況下,再次執(zhí)行鎖獲取語(yǔ)句。
[0043]處理數(shù)據(jù)庫(kù)互斥鎖的裝置20還可以包括查看模塊(圖中未示出),用于在當(dāng)前操作獲得互斥鎖之后,查看當(dāng)前操作所獲得的互斥鎖的狀態(tài),在該互斥鎖被數(shù)據(jù)庫(kù)刪除的情況下,向連接在該數(shù)據(jù)庫(kù)上的鎖等待對(duì)象發(fā)送提示信息。[0044]本發(fā)明實(shí)施例中的互斥鎖能夠在鎖釋放的時(shí)候,立刻被等待的單元獲得,通知過(guò)程由數(shù)據(jù)庫(kù)來(lái)處理,無(wú)需作單獨(dú)的開(kāi)發(fā)。該鎖的實(shí)現(xiàn)方式不能造成數(shù)據(jù)庫(kù)的死鎖問(wèn)題,需要保證安全性。通過(guò)唯一編號(hào),對(duì)共享資源進(jìn)行互斥依賴,鎖包含多種方法,可以是其中的一種或者幾種方法,方法包括:(I)、獲得一個(gè)鎖,該方法是一個(gè)阻塞方法,針對(duì)同一個(gè)鎖,需要等待其他持有鎖的單元釋放鎖。如鎖不釋放,則一直等待。(2)、釋放一個(gè)鎖,丟棄一個(gè)鎖的占有,該鎖可以被其他單元競(jìng)爭(zhēng)獲得。(3)、嘗試獲得一個(gè)鎖,該方法需要一個(gè)超時(shí)時(shí)間,在該時(shí)間段內(nèi),會(huì)嘗試去獲取一個(gè)鎖。(4)、判斷是否被鎖住,該鎖是否已經(jīng)被持有。
[0045]以下結(jié)合圖3和圖4對(duì)本發(fā)明實(shí)施例的一種優(yōu)選方式做出說(shuō)明。圖3是根據(jù)本發(fā)明實(shí)施例的一種處理數(shù)據(jù)庫(kù)互斥鎖的系統(tǒng)的示意圖,圖4是根據(jù)本發(fā)明實(shí)施例的一種獲取互斥鎖的優(yōu)選流程的示意圖,該流程基于圖3所示的系統(tǒng)實(shí)現(xiàn)。圖3中同時(shí)示出了各個(gè)模塊之間的主要交互關(guān)系。以下先對(duì)圖3中各模塊的功能加以說(shuō)明。
[0046]資源管理中心用于分配數(shù)據(jù)庫(kù)連接,連接數(shù)的最大閾值可配置。狀態(tài)語(yǔ)句準(zhǔn)備單元用于判斷數(shù)據(jù)庫(kù)類型,并且生成相應(yīng)的可執(zhí)行語(yǔ)句。命令執(zhí)行單元用于和數(shù)據(jù)庫(kù)交互,執(zhí)行狀態(tài)語(yǔ)句單元傳入的SQL語(yǔ)句。分析單元用于解析命令執(zhí)行單元返回的結(jié)果,判斷是否持有該鎖,并且負(fù)責(zé)下一步命令的執(zhí)行,失敗轉(zhuǎn)移,重試。如果為獲得鎖的動(dòng)作,由該單元通知。存儲(chǔ)單元用于保存已經(jīng)存在的鎖名稱,該條記錄持久化于數(shù)據(jù)庫(kù)之中,并且作為唯一的區(qū)分鎖的條件,供所有名稱相同的鎖使用。名稱生成單元用于在不存在某個(gè)鎖名稱的時(shí)候,生成一條記錄,并通過(guò)命令執(zhí)行單元同步到數(shù)據(jù)庫(kù)。資源釋放單元用于釋放靜態(tài)資源,連接、狀態(tài)等,并且通知資源管理中心對(duì)連接重新計(jì)數(shù)。
[0047]本申請(qǐng)實(shí)施例中,鎖使用的數(shù)據(jù)庫(kù)連接與業(yè)務(wù)系統(tǒng)采用同一個(gè)連接,當(dāng)創(chuàng)建的鎖對(duì)象過(guò)多的時(shí)候,連接將會(huì)被鎖資源完全占有,該連接只能在鎖釋放的時(shí)候移除。而鎖的使用,需要在業(yè)務(wù)之前進(jìn)行鎖(Lock)操作,而在業(yè)務(wù)之后進(jìn)行釋放鎖(Unlock)操作,所以在接下來(lái)的業(yè)務(wù)操作中,業(yè)務(wù)系統(tǒng)將不能夠獲得再獲得數(shù)據(jù)庫(kù)連接,并且會(huì)一直阻塞在獲取連接的過(guò)程當(dāng)中,這樣會(huì)造成部分?jǐn)?shù)據(jù)死鎖。為了區(qū)分權(quán)重與公平性的調(diào)度,同時(shí)滿足靈活的業(yè)務(wù)適應(yīng)性,所以設(shè)計(jì)了一個(gè)資源管理中心來(lái)有效的分配鎖可用的連接。
[0048]參閱圖3所示,本申請(qǐng)實(shí)施例中,系統(tǒng)內(nèi)設(shè)置有用于生成鎖唯一標(biāo)識(shí)的存儲(chǔ)單元,在數(shù)據(jù)庫(kù)新建該表的時(shí)候,并不生成該鎖的唯一標(biāo)識(shí)行。用戶可通過(guò)自定義名稱,并且在第一次使用鎖的時(shí)候,生成該唯一標(biāo)識(shí)行。唯一標(biāo)識(shí)行的生成是由名稱生成單元通過(guò)判斷鎖名稱唯一值在數(shù)據(jù)庫(kù)中是否存在,當(dāng)該名稱不存在則返回結(jié)果需要生成標(biāo)識(shí)行,在高并發(fā)情況下,唯一標(biāo)識(shí)行的同步生成由數(shù)據(jù)庫(kù)唯一索引控制。
[0049]本申請(qǐng)實(shí)施例中,資源管理中心在鎖實(shí)例構(gòu)建的時(shí)候生成,資源管理中心包含以下屬性,所有鎖可獲得的最大數(shù)據(jù)庫(kù)連接數(shù),當(dāng)前所有鎖共持有的數(shù)據(jù)庫(kù)連接數(shù)。資源管理中心還包含以下方法:初始化數(shù)據(jù)庫(kù)連接對(duì)象,釋放數(shù)據(jù)庫(kù)連接對(duì)象。在某個(gè)操作嘗試獲得一個(gè)鎖的時(shí)候,會(huì)首先進(jìn)入資源管理中心,從該中心獲得一個(gè)可用的數(shù)據(jù)庫(kù)連接,在獲得連接過(guò)程中,首先會(huì)判斷資源管理中心所有鎖可獲得的最大連接數(shù)是否已經(jīng)到達(dá)閾值,如果等于該閾值則等待,直到其他鎖釋放一個(gè)連接之后,并通知該資源管理中心。每獲得一個(gè)連接,資源管理中心所有鎖持有的數(shù)據(jù)庫(kù)連接數(shù)加一,每釋放一個(gè)連接,所有鎖持有的數(shù)據(jù)庫(kù)連接則減一。通過(guò)該步驟,能夠有效的保障,在業(yè)務(wù)系統(tǒng)之中,鎖不會(huì)占用過(guò)多的連接資源??筛鶕?jù)具體的初始化連接數(shù),配置最大能夠持有的連接閾值。[0050]狀態(tài)語(yǔ)句準(zhǔn)備單元在鎖構(gòu)建的時(shí)候生成,該單元可通過(guò)不同的數(shù)據(jù)庫(kù)類型,按需生成不同的可執(zhí)行語(yǔ)句,主要包含以下的操作語(yǔ)句:獲得一個(gè)修改鎖的執(zhí)行語(yǔ)句,和獲得一個(gè)生成唯一標(biāo)識(shí)行的執(zhí)行語(yǔ)句。
[0051]獲得一個(gè)修改鎖的執(zhí)行語(yǔ)句主要用于產(chǎn)生一個(gè)數(shù)據(jù)庫(kù)的互斥行鎖。如果在數(shù)據(jù)庫(kù)已經(jīng)有一個(gè)或多個(gè)鎖在該唯一標(biāo)識(shí)行上等待,則線程會(huì)在該條語(yǔ)句的執(zhí)行過(guò)程中等待,由于不同的數(shù)據(jù)庫(kù)包含一定的鎖等待超時(shí)時(shí)間,如mysql的默認(rèn)等待時(shí)間為50秒。所以,在到達(dá)50秒之后,會(huì)拋出一個(gè)異常。命令執(zhí)行單元可捕獲該異常,并且忽略該異常。當(dāng)異常發(fā)生之后,重新執(zhí)行該條語(yǔ)句,再一次的嘗試獲得鎖。
[0052]獲得一個(gè)生成唯一標(biāo)識(shí)行的執(zhí)行語(yǔ)句主要用于向存儲(chǔ)單元生成一條由鎖名稱作為唯一標(biāo)識(shí)的行。因?yàn)榛跀?shù)據(jù)庫(kù)的互斥鎖行鎖,需要在數(shù)據(jù)庫(kù)存儲(chǔ)單元中有記錄,而鎖的唯一標(biāo)識(shí)可自定義,所以在初始化的時(shí)候并不生成該存儲(chǔ)單元,而由第一次嘗試獲得鎖的過(guò)程來(lái)生成該單元。通過(guò)數(shù)據(jù)庫(kù)的唯一索引,可以保證該單元生成數(shù)據(jù)的唯一性和可靠性。在高并發(fā)情況下,多個(gè)競(jìng)爭(zhēng)機(jī)制期望生成相同的記錄,會(huì)拋出異常,由命令執(zhí)行單元捕獲該異常,忽略該異常。
[0053]命令執(zhí)行單元負(fù)責(zé)執(zhí)行由狀態(tài)語(yǔ)句準(zhǔn)備單元生成的語(yǔ)句并執(zhí)行返回結(jié)果。分析單元根據(jù)調(diào)用的方法判斷返回結(jié)果,及下一步操作動(dòng)作。在本申請(qǐng)實(shí)例中,包含了以下幾種可倉(cāng)泛:
[0054]獲得一個(gè)鎖,該步驟是一個(gè)阻塞的步驟。必須等待一個(gè)對(duì)象獲得該鎖才返回。如果未獲得一個(gè)鎖,或者中途出現(xiàn)異常,則再一次循環(huán),調(diào)用獲得鎖的步驟;嘗試獲得一個(gè)鎖,該步驟只執(zhí)行一次獲得鎖的步驟,如果能夠獲得鎖則返回真,否則返回假;在一定的時(shí)間范圍內(nèi)嘗試獲得一個(gè)鎖,該步驟需給定一個(gè)時(shí)間范圍,在該范圍內(nèi),循環(huán)執(zhí)行獲得鎖的步驟。如果獲得則返回,如果未獲得則做下一步判斷,如果到達(dá)時(shí)間設(shè)置閾值,跳出循環(huán),返回假;如果未到達(dá)時(shí)間設(shè)置閾值,則再一次執(zhí)行獲得鎖的步驟。
[0055]鎖使用完畢之后需要做相應(yīng)的狀態(tài)回收,該步驟由資源釋放單元處理。資源釋放單元主要用來(lái)釋放連接,并且修改鎖的狀態(tài)為未鎖。鎖的狀態(tài)可通過(guò)狀態(tài)查看單元查看。在鎖的狀態(tài)為未鎖的情況下立即通知其他鎖等待對(duì)象。
[0056]以下對(duì)圖4的流程加以說(shuō)明。
[0057]步驟S401:執(zhí)行獲得鎖動(dòng)作。此時(shí)需要給出具體的獲取方式,傳入一個(gè)超時(shí)時(shí)間。
[0058]步驟S402:狀態(tài)查看單元判斷當(dāng)前鎖是否可用,如果不可用則跳到步驟S403。
[0059]步驟S403:等待,以重新獲得鎖資源,在預(yù)設(shè)時(shí)長(zhǎng)后返回步驟S401。
[0060]步驟S404:資源管理中心初始化連接,并且將該連接交給分析中心,分析中心在鎖被釋放之前一直持有該連接。
[0061]步驟S405:資源管理中心判斷可用連接數(shù)是否到達(dá)閾值,如果到達(dá)到閾值,則執(zhí)行步驟S403繼續(xù)等待。
[0062]步驟S406:分析中心記錄獲得鎖的開(kāi)始時(shí)間,用于判斷在每次獲得鎖的過(guò)程中是否超時(shí)。
[0063]步驟S407:狀態(tài)語(yǔ)句準(zhǔn)備單元生成可執(zhí)行語(yǔ)句,該語(yǔ)句的生成過(guò)程需要結(jié)合具體使用的數(shù)據(jù)庫(kù)類型。
[0064]步驟S408:命令執(zhí)行單元執(zhí)行語(yǔ)句。語(yǔ)句生成完成之后,分析中心將該語(yǔ)句交給命令執(zhí)行單元執(zhí)行。命令執(zhí)行單元直接與數(shù)據(jù)庫(kù)交互。
[0065]步驟S409:分析中心判斷是否已生成唯一標(biāo)識(shí)。語(yǔ)句在執(zhí)行完成之后返回結(jié)果給分析中心,結(jié)果包含3種類型,已鎖,未鎖,未生成鎖唯一標(biāo)識(shí)存儲(chǔ)單元,判斷結(jié)果如果是未生成鎖唯一存儲(chǔ)標(biāo)識(shí)單元,則執(zhí)行步驟S410生成唯一標(biāo)識(shí)單元。
[0066]步驟S410:生成一個(gè)唯一標(biāo)識(shí)單元,然后返回步驟S409。該唯一標(biāo)識(shí)單元將通過(guò)命令執(zhí)行單元同步到數(shù)據(jù)庫(kù)。
[0067]步驟S411:判斷鎖是否成功鎖住,如果未成功鎖住則跳到步驟S403。
[0068]步驟S412:計(jì)算從開(kāi)始到當(dāng)前時(shí)間點(diǎn)所花費(fèi)的執(zhí)行時(shí)間。
[0069]步驟S413:判斷是否超時(shí),即該執(zhí)行時(shí)間是否大于傳入的超時(shí)時(shí)間,如果是則認(rèn)為超時(shí),執(zhí)行步驟S414,否則進(jìn)入步驟S415。
[0070]步驟S414:跳出流程并返回獲得鎖失敗的結(jié)果。
[0071]步驟S415:返回獲得鎖成功結(jié)果。
[0072]整個(gè)鎖的獲得過(guò)程是一個(gè)循環(huán),根據(jù)不同的條件來(lái)判斷下一步的動(dòng)作。并且在獲得過(guò)程中,隨時(shí)可能出現(xiàn)各種異常,如數(shù)據(jù)庫(kù)突然斷網(wǎng)。則不部分異常都需要做相應(yīng)的處理,如在斷網(wǎng)或者連接不可用之后,需要生成新的可用連接。由于鎖被釋放之后,排隊(duì)等待獲得鎖的機(jī)制會(huì)相互競(jìng)爭(zhēng),這里并沒(méi)有排序的隊(duì)列,競(jìng)爭(zhēng)過(guò)程均有數(shù)據(jù)庫(kù)處理。
[0073]根據(jù)本發(fā)明實(shí)施例的技術(shù)方案,識(shí)別當(dāng)前操作所針對(duì)的數(shù)據(jù)庫(kù)的類型,再生成這些數(shù)據(jù)庫(kù)中的可執(zhí)行語(yǔ)句,能夠?qū)崿F(xiàn)針對(duì)多個(gè)數(shù)據(jù)庫(kù)的操作在并發(fā)時(shí)的互斥操作。利用數(shù)據(jù)庫(kù)的鎖等待超時(shí)的異常提示信息,再次嘗試獲得鎖,有助于避免系統(tǒng)局部死鎖。通過(guò)設(shè)置互斥鎖的最大數(shù)據(jù)庫(kù)連接數(shù),使互斥鎖不至于占用過(guò)多的數(shù)據(jù)庫(kù)連接資源從而影響業(yè)務(wù)系統(tǒng)的運(yùn)行。通過(guò)查看已獲得的互斥鎖的狀態(tài)并且在該互斥鎖被刪除的情況下通知其他鎖等待對(duì)象,便于其他操作及時(shí)獲取鎖。
[0074]以上結(jié)合具體實(shí)施例描述了本發(fā)明的基本原理,但是,需要指出的是,對(duì)本領(lǐng)域的普通技術(shù)人員而言,能夠理解本發(fā)明的方法和設(shè)備的全部或者任何步驟或者部件,可以在任何計(jì)算裝置(包括處理器、存儲(chǔ)介質(zhì)等)或者計(jì)算裝置的網(wǎng)絡(luò)中,以硬件、固件、軟件或者它們的組合加以實(shí)現(xiàn),這是本領(lǐng)域普通技術(shù)人員在閱讀了本發(fā)明的說(shuō)明的情況下運(yùn)用他們的基本編程技能就能實(shí)現(xiàn)的。
[0075]因此,本發(fā)明的目的還可以通過(guò)在任何計(jì)算裝置上運(yùn)行一個(gè)程序或者一組程序來(lái)實(shí)現(xiàn)。所述計(jì)算裝置可以是公知的通用裝置。因此,本發(fā)明的目的也可以僅僅通過(guò)提供包含實(shí)現(xiàn)所述方法或者裝置的程序代碼的程序產(chǎn)品來(lái)實(shí)現(xiàn)。也就是說(shuō),這樣的程序產(chǎn)品也構(gòu)成本發(fā)明,并且存儲(chǔ)有這樣的程序產(chǎn)品的存儲(chǔ)介質(zhì)也構(gòu)成本發(fā)明。顯然,所述存儲(chǔ)介質(zhì)可以是任何公知的存儲(chǔ)介質(zhì)或者將來(lái)開(kāi)發(fā)出的任何存儲(chǔ)介質(zhì)。
[0076]還需要指出的是,在本發(fā)明的裝置和方法中,顯然,各部件或各步驟是可以分解和/或重新組合的。這些分解和/或重新組合應(yīng)視為本發(fā)明的等效方案。并且,執(zhí)行上述系列處理的步驟可以自然地按照說(shuō)明的順序按時(shí)間順序執(zhí)行,但是并不需要一定按照時(shí)間順序執(zhí)行。某些步驟可以并行或彼此獨(dú)立地執(zhí)行。
[0077]上述【具體實(shí)施方式】,并不構(gòu)成對(duì)本發(fā)明保護(hù)范圍的限制。本領(lǐng)域技術(shù)人員應(yīng)該明白的是,取決于設(shè)計(jì)要求和其他因素,可以發(fā)生各種各樣的修改、組合、子組合和替代。任何在本發(fā)明的精神和原則之內(nèi)所作的修改、等同替換和改進(jìn)等,均應(yīng)包含在本發(fā)明保護(hù)范圍之內(nèi)。
【權(quán)利要求】
1.一種處理數(shù)據(jù)庫(kù)互斥鎖的方法,其特征在于,包括: 確定當(dāng)前操作所針對(duì)的多個(gè)數(shù)據(jù)庫(kù)的類型; 對(duì)于確定的每個(gè)類型的數(shù)據(jù)庫(kù),生成可執(zhí)行語(yǔ)句,所述可執(zhí)行語(yǔ)句用于獲得適用于該數(shù)據(jù)庫(kù)的互斥鎖; 執(zhí)行所述可執(zhí)行語(yǔ)句以使所述當(dāng)前操作獲得所述互斥鎖。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,確定當(dāng)前操作所針對(duì)的多個(gè)數(shù)據(jù)庫(kù)的類型的步驟包括:根據(jù)數(shù)據(jù)庫(kù)連接字符串得出當(dāng)前操作所針對(duì)的多個(gè)數(shù)據(jù)庫(kù)的類型。
3.根據(jù)權(quán)利要求1或2所述的方法,其特征在于,所述可執(zhí)行語(yǔ)句包括標(biāo)注語(yǔ)句和獲取鎖語(yǔ)句,其中: 所述標(biāo)注語(yǔ)句用于對(duì)所述當(dāng)前操作所針對(duì)的數(shù)據(jù)單元采用所述互斥鎖的標(biāo)識(shí)進(jìn)行標(biāo)注; 所述獲取鎖語(yǔ)句用于獲取互斥鎖,該互斥鎖的標(biāo)識(shí)標(biāo)注了當(dāng)前操作所針對(duì)的數(shù)據(jù)單J Li ο
4.根據(jù)權(quán)利要求1所述的方法,其特征在于, 在確定當(dāng)前操作所針對(duì)的多個(gè)數(shù)據(jù)庫(kù)的類型的步驟之前,還包括:為預(yù)設(shè)的互斥鎖集合配置該互斥鎖集合中的所有互斥鎖可獲得的最大數(shù)據(jù)庫(kù)連接數(shù); 所述可執(zhí)行語(yǔ)句用于獲得所述互斥鎖集合中的互斥鎖; 在執(zhí)行鎖獲取語(yǔ)句之前,判斷所述互斥鎖集合中的所有互斥鎖在當(dāng)前持有的數(shù)據(jù)庫(kù)連接數(shù)是否不大于預(yù)設(shè)值,若是,則執(zhí)行所述鎖獲取語(yǔ)句,否則等待所述數(shù)據(jù)庫(kù)連接數(shù)不大于預(yù)設(shè)值然后再執(zhí)行所述鎖獲取語(yǔ)句。
5.根據(jù)權(quán)利要求1或4所述的方法,其特征在于,在執(zhí)行鎖獲取語(yǔ)句時(shí),監(jiān)聽(tīng)數(shù)據(jù)庫(kù)提供的鎖等待超時(shí)提示信息,在收到該鎖等待超時(shí)提示信息的情況下,再次執(zhí)行鎖獲取語(yǔ)句。
6.根據(jù)權(quán)利要求1或4所述的方法,其特征在于,在當(dāng)前操作獲得所述互斥鎖之后,該方法還包括: 查看所述當(dāng)前操作所獲得的互斥鎖的狀態(tài),在所述互斥鎖被數(shù)據(jù)庫(kù)刪除的情況下,向連接在該數(shù)據(jù)庫(kù)上的鎖等待對(duì)象發(fā)送提示信息。
7.—種處理數(shù)據(jù)庫(kù)互斥鎖的裝置,其特征在于,包括: 識(shí)別模塊,用于確定當(dāng)前操作所針對(duì)的多個(gè)數(shù)據(jù)庫(kù)的類型; 語(yǔ)句模塊,用于對(duì)于確定的每個(gè)類型的數(shù)據(jù)庫(kù),生成可執(zhí)行語(yǔ)句,所述可執(zhí)行語(yǔ)句用于獲得適用于該數(shù)據(jù)庫(kù)的互斥鎖; 執(zhí)行模塊,用于執(zhí)行所述可執(zhí)行語(yǔ)句以使所述當(dāng)前操作獲得所述互斥鎖。
8.根據(jù)權(quán)利要求7所述的裝置,其特征在于,所述識(shí)別模塊還用于根據(jù)數(shù)據(jù)庫(kù)連接字符串得出當(dāng)前操作所針對(duì)的多個(gè)數(shù)據(jù)庫(kù)的類型。
9.根據(jù)權(quán)利要求7或8所述的裝置,其特征在于,所述語(yǔ)句模塊還用于生成標(biāo)注語(yǔ)句和獲取鎖語(yǔ)句,其中: 所述標(biāo)注語(yǔ)句用于對(duì)所述當(dāng)前操作所針對(duì)的數(shù)據(jù)單元采用所述互斥鎖的標(biāo)識(shí)進(jìn)行標(biāo)注; 所述獲取鎖語(yǔ)句用于獲取互斥鎖,該互斥鎖的標(biāo)識(shí)標(biāo)注了當(dāng)前操作所針對(duì)的數(shù)據(jù)單J Li ο
10.根據(jù)權(quán)利要求7所述的裝置,其特征在于, 還包括配置模塊,用于為預(yù)設(shè)的互斥鎖集合配置該互斥鎖集合中的所有互斥鎖可獲得的最大數(shù)據(jù)庫(kù)連接數(shù); 所述語(yǔ)句模塊還用于生成用于獲得所述互斥鎖集合中的互斥鎖; 所述執(zhí)行模塊還用于在執(zhí)行鎖獲取語(yǔ)句之前,判斷所述互斥鎖集合中的所有互斥鎖在當(dāng)前持有的數(shù)據(jù)庫(kù)連接數(shù)是否不大于預(yù)設(shè)值,若是,則執(zhí)行所述鎖獲取語(yǔ)句,否則等待所述數(shù)據(jù)庫(kù)連接數(shù)不大于預(yù)設(shè)值然后再執(zhí)行所述鎖獲取語(yǔ)句。
11.根據(jù)權(quán)利要求7或10所述的裝置,其特征在于,所述執(zhí)行模塊還用于在執(zhí)行鎖獲取語(yǔ)句時(shí),監(jiān)聽(tīng)數(shù)據(jù)庫(kù)提供的鎖等待超時(shí)提示信息,在收到該鎖等待超時(shí)提示信息的情況下,再次執(zhí)行鎖獲取語(yǔ)句。
12.根據(jù)權(quán)利要求7或10所述的裝置,其特征在于,還包括查看模塊,用于在當(dāng)前操作獲得所述互斥鎖之后,查看所述當(dāng)前操作所獲得的互斥鎖的狀態(tài),在所述互斥鎖被數(shù)據(jù)庫(kù)刪除的情況下,向連接在該數(shù)據(jù)庫(kù)上的鎖等待對(duì)象發(fā)送提示信息。
13.—種分布式系統(tǒng),包括多個(gè)節(jié)點(diǎn),其特征在于,各個(gè)所述節(jié)點(diǎn)中設(shè)置有權(quán)利要求7至12中任一項(xiàng)所述的處理數(shù)據(jù)庫(kù)互斥鎖的裝置。
【文檔編號(hào)】G06F17/30GK103761260SQ201310750117
【公開(kāi)日】2014年4月30日 申請(qǐng)日期:2013年12月31日 優(yōu)先權(quán)日:2013年12月31日
【發(fā)明者】王海 申請(qǐng)人:北京京東尚科信息技術(shù)有限公司, 北京京東世紀(jì)貿(mào)易有限公司