亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

處理數(shù)據(jù)庫互斥鎖的方法和裝置以及分布式系統(tǒng)的制作方法

文檔序號:6526843閱讀:637來源:國知局
處理數(shù)據(jù)庫互斥鎖的方法和裝置以及分布式系統(tǒng)的制作方法
【專利摘要】本發(fā)明的主要目的是提供一種處理數(shù)據(jù)庫互斥鎖的方法和裝置,以實現(xiàn)針對多個數(shù)據(jù)庫的操作在并發(fā)時的互斥操作;本發(fā)明的另一目的是提供一種分布式系統(tǒng),實現(xiàn)多個節(jié)點各自執(zhí)行上述操作時的互斥操作。本發(fā)明的處理數(shù)據(jù)庫互斥鎖的方法包括:確定當(dāng)前操作所針對的多個數(shù)據(jù)庫的類型;對于確定的每個類型的數(shù)據(jù)庫,生成可執(zhí)行語句,所述可執(zhí)行語句用于獲得適用于該數(shù)據(jù)庫的互斥鎖;執(zhí)行所述可執(zhí)行語句以使所述當(dāng)前操作獲得所述互斥鎖。
【專利說明】處理數(shù)據(jù)庫互斥鎖的方法和裝置以及分布式系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計算機(jī)技術(shù),特別地涉及一種處理數(shù)據(jù)庫互斥鎖的方法和裝置以及分布式系統(tǒng)。
【背景技術(shù)】
[0002]數(shù)據(jù)庫互斥鎖的主要作用是保證在當(dāng)前存在多個操作時數(shù)據(jù)的完整性。在向數(shù)據(jù)庫的一個數(shù)據(jù)單元(例如數(shù)據(jù)庫的一行)進(jìn)行操作時,當(dāng)前操作獲得一個針對該數(shù)據(jù)單元的鎖,使其他操作無法對該數(shù)據(jù)單元進(jìn)行操作;在當(dāng)前操作完成對該數(shù)據(jù)單元的操作后,該鎖被釋放,使其他操作可以獲得針對該數(shù)據(jù)單元的鎖。
[0003]在現(xiàn)實中,復(fù)雜的應(yīng)用系統(tǒng)往往需要由同一操作針對多個數(shù)據(jù)庫進(jìn)行,例如,從幾個數(shù)據(jù)庫中各讀取一部分?jǐn)?shù)據(jù)。對于這類操作在并發(fā)時如何實現(xiàn)互斥操作,現(xiàn)有技術(shù)尚未提供相關(guān)方案;另外,在分布式系統(tǒng)中,對于多個節(jié)點各自執(zhí)行的上述操作如何實現(xiàn)互斥操作,現(xiàn)有技術(shù)也未提供相關(guān)方案。

【發(fā)明內(nèi)容】

[0004]有鑒于此,本發(fā)明的主要目的是提供一種處理數(shù)據(jù)庫互斥鎖的方法和裝置,以實現(xiàn)針對多個數(shù)據(jù)庫的操作在并發(fā)時的互斥操作;本發(fā)明的另一目的是提供一種分布式系統(tǒng),實現(xiàn)多個節(jié)點各自執(zhí)行上述操作時的互斥操作。本發(fā)明的其他目的、特點將結(jié)合實施例加以描述。
[0005]為實現(xiàn)上述目的,根據(jù)本發(fā)明的一個方面,提供了 一種處理數(shù)據(jù)庫互斥鎖的方法。
[0006]本發(fā)明的處理數(shù)據(jù)庫互斥鎖的方法包括:確定當(dāng)前操作所針對的多個數(shù)據(jù)庫的類型;對于確定的每個類型的數(shù)據(jù)庫,生成可執(zhí)行語句,所述可執(zhí)行語句用于獲得適用于該數(shù)據(jù)庫的互斥鎖;執(zhí)行所述可執(zhí)行語句以使所述當(dāng)前操作獲得所述互斥鎖。
[0007]可選地,確定當(dāng)前操作所針對的多個數(shù)據(jù)庫的類型的步驟包括:根據(jù)數(shù)據(jù)庫連接字符串得出當(dāng)前操作所針對的多個數(shù)據(jù)庫的類型。
[0008]可選地,所述可執(zhí)行語句包括標(biāo)注語句和獲取鎖語句,其中:所述標(biāo)注語句用于對所述當(dāng)前操作所針對的數(shù)據(jù)單元采用所述互斥鎖的標(biāo)識進(jìn)行標(biāo)注;所述獲取鎖語句用于獲取互斥鎖,該互斥鎖的標(biāo)識標(biāo)注了當(dāng)前操作所針對的數(shù)據(jù)單元。
[0009]可選地,在確定當(dāng)前操作所針對的多個數(shù)據(jù)庫的類型的步驟之前,還包括:為預(yù)設(shè)的互斥鎖集合配置該互斥鎖集合中的所有互斥鎖可獲得的最大數(shù)據(jù)庫連接數(shù);所述可執(zhí)行語句用于獲得所述互斥鎖集合中的互斥鎖;在執(zhí)行鎖獲取語句之前,判斷所述互斥鎖集合中的所有互斥鎖在當(dāng)前持有的數(shù)據(jù)庫連接數(shù)是否不大于預(yù)設(shè)值,若是,則執(zhí)行所述鎖獲取語句,否則等待所述數(shù)據(jù)庫連接數(shù)不大于預(yù)設(shè)值然后再執(zhí)行所述鎖獲取語句。
[0010]可選地,在執(zhí)行鎖獲取語句時,監(jiān)聽數(shù)據(jù)庫提供的鎖等待超時提示信息,在收到該鎖等待超時提示信息的情況下,再次執(zhí)行鎖獲取語句。
[0011]可選地,在當(dāng)前操作獲得所述互斥鎖之后,該方法還包括:查看所述當(dāng)前操作所獲得的互斥鎖的狀態(tài),在所述互斥鎖被數(shù)據(jù)庫刪除的情況下,向連接在該數(shù)據(jù)庫上的鎖等待對象發(fā)送提示信息。
[0012]根據(jù)本發(fā)明的另一方面,提供了 一種處理數(shù)據(jù)庫互斥鎖的裝置。
[0013]本發(fā)明的處理數(shù)據(jù)庫互斥鎖的裝置包括:識別模塊,用于確定當(dāng)前操作所針對的多個數(shù)據(jù)庫的類型;語句模塊,用于對于確定的每個類型的數(shù)據(jù)庫,生成可執(zhí)行語句,所述可執(zhí)行語句用于獲得適用于該數(shù)據(jù)庫的互斥鎖;執(zhí)行模塊,用于執(zhí)行所述可執(zhí)行語句以使所述當(dāng)前操作獲得所述互斥鎖。
[0014]可選地,所述識別模塊還用于根據(jù)數(shù)據(jù)庫連接字符串得出當(dāng)前操作所針對的多個數(shù)據(jù)庫的類型。
[0015]可選地,所述語句模塊還用于生成標(biāo)注語句和獲取鎖語句,其中:所述標(biāo)注語句用于對所述當(dāng)前操作所針對的數(shù)據(jù)單元采用所述互斥鎖的標(biāo)識進(jìn)行標(biāo)注;所述獲取鎖語句用于獲取互斥鎖,該互斥鎖的標(biāo)識標(biāo)注了當(dāng)前操作所針對的數(shù)據(jù)單元。
[0016]可選地,還包括配置模塊,用于為預(yù)設(shè)的互斥鎖集合配置該互斥鎖集合中的所有互斥鎖可獲得的最大數(shù)據(jù)庫連接數(shù);所述語句模塊還用于生成用于獲得所述互斥鎖集合中的互斥鎖;所述執(zhí)行模塊還用于在執(zhí)行鎖獲取語句之前,判斷所述互斥鎖集合中的所有互斥鎖在當(dāng)前持有的數(shù)據(jù)庫連接數(shù)是否不大于預(yù)設(shè)值,若是,則執(zhí)行所述鎖獲取語句,否則等待所述數(shù)據(jù)庫連接數(shù)不大于預(yù)設(shè)值然后再執(zhí)行所述鎖獲取語句。
[0017]可選地,所述執(zhí)行模塊還用于在執(zhí)行鎖獲取語句時,監(jiān)聽數(shù)據(jù)庫提供的鎖等待超時提示信息,在收到該鎖等待超時提示信息的情況下,再次執(zhí)行鎖獲取語句。
[0018]可選地,還包括查看模塊,用于在當(dāng)前操作獲得所述互斥鎖之后,查看所述當(dāng)前操作所獲得的互斥鎖的狀態(tài),在所述互斥鎖被數(shù)據(jù)庫刪除的情況下,向連接在該數(shù)據(jù)庫上的鎖等待對象發(fā)送提不/[目息。
[0019]根據(jù)本發(fā)明的又一方面,提供了一種分布式系統(tǒng)。
[0020]本發(fā)明的分布式系統(tǒng)包括多個節(jié)點,各個所述節(jié)點中設(shè)置有本發(fā)明中的處理數(shù)據(jù)庫互斥鎖的裝置。
[0021]根據(jù)本發(fā)明的技術(shù)方案,識別當(dāng)前操作所針對的數(shù)據(jù)庫的類型,再生成這些數(shù)據(jù)庫中的可執(zhí)行語句,能夠?qū)崿F(xiàn)針對多個數(shù)據(jù)庫的操作在并發(fā)時的互斥操作。利用數(shù)據(jù)庫的鎖等待超時的異常提示信息,再次嘗試獲得鎖,有助于避免系統(tǒng)局部死鎖。通過設(shè)置互斥鎖的最大數(shù)據(jù)庫連接數(shù),使互斥鎖不至于占用過多的數(shù)據(jù)庫連接資源從而影響業(yè)務(wù)系統(tǒng)的運行。通過查看已獲得的互斥鎖的狀態(tài)并且在該互斥鎖被刪除的情況下通知其他鎖等待對象,便于其他操作及時獲取鎖。
【專利附圖】

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