基于碰撞探測的行級鎖定集合實現(xiàn)裝置及方法
【專利摘要】本發(fā)明公開了一種基于碰撞探測的行級鎖定集合實現(xiàn)裝置及方法,涉及通信網(wǎng)傳輸設備與接入設備領域,該裝置包括鎖定記錄關鍵字集合和記錄集合,鎖定記錄關鍵字集合包括互斥鎖和關鍵字提取函數(shù),鎖定記錄關鍵字集合用于進行行級鎖定時,依據(jù)記錄關鍵字提取函數(shù)從需要鎖定的記錄中抽出關鍵字,將關鍵字插入到鎖定記錄關鍵字集合中;記錄集合是容納所有記錄的唯一性關聯(lián)容器,容器中的對象類型為記錄類型,容器的唯一性、排序依據(jù)為記錄中的關鍵字,而關鍵字由關鍵字提取函數(shù)在記錄中提取。本發(fā)明采取關鍵數(shù)據(jù)集合+輪詢探測的方式,在高并發(fā)條件下對集合進行高效訪問,集合中單條或多條記錄鎖定不影響全局操作。
【專利說明】基于碰撞探測的行級鎖定集合實現(xiàn)裝置及方法
【技術領域】
[0001]本發(fā)明涉及通信網(wǎng)傳輸設備與接入設備領域,具體是涉及一種基于碰撞探測的行級鎖定集合實現(xiàn)裝置及方法。
【背景技術】
[0002]現(xiàn)有的集合容器在處理對內(nèi)部某條記錄的并發(fā)操作場景時,如果要防止某一條記錄被修改,通常是對整個集合加互斥鎖,或者是加讀寫鎖。即使是后者,也會對全集進行鎖定,如果鎖定時間較長,則整個集合容器整體被鎖定的時間就隨之延長。往往當某一行記錄被鎖定,進而導致全集被鎖定,操作其他記錄(尤其是寫操作)受到影響,嚴重影響操作的效率?,F(xiàn)有的另一種方法是對集合中每個對象持有一個鎖,但這種情況在集合中數(shù)據(jù)量非常龐大時,會迅速耗盡操作系統(tǒng)中對應資源??傊?,目前的集合中單條或多條記錄鎖定影響全局操作。
【發(fā)明內(nèi)容】
[0003]本發(fā)明的目的是為了克服上述【背景技術】的不足,提供一種基于碰撞探測的行級鎖定集合實現(xiàn)裝置及方法,采取關鍵數(shù)據(jù)集合+輪詢探測的方式,在高并發(fā)條件下對集合進行高效訪問,集合中單條或多條記錄鎖定不影響全局操作。
[0004]本發(fā)明提供一種基于碰撞探測的行級鎖定集合實現(xiàn)裝置,包括鎖定記錄關鍵字集合和記錄集合,所述鎖定記錄關鍵字集合包括互斥鎖和關鍵字提取函數(shù),互斥鎖是操作系統(tǒng)提供的常規(guī)互斥鎖;關鍵字提取函數(shù)是將記錄中的關鍵字抽取出來的功能函數(shù),由定義該集合的用戶自行定義;
[0005]所述鎖定記錄關鍵字集合,用于:進行行級鎖定時,依據(jù)記錄關鍵字提取函數(shù)從需要鎖定的記錄中抽出關鍵字,將關鍵字插入到鎖定記錄關鍵字集合中;鎖定記錄關鍵字集合為有序且成員唯一的集合,具備插入相同記錄時返回錯誤的特性,該集合由需要行鎖定的記錄的關鍵字對象組成;鎖定記錄關鍵字由用戶定義;
[0006]所述記錄集合是容納所有記錄的唯一性關聯(lián)容器,容器中的對象類型為記錄類型,容器的唯一性、排序依據(jù)為記錄中的關鍵字,而關鍵字由關鍵字提取函數(shù)在記錄中提取。
[0007]在上述技術方案的基礎上,所述裝置對外提供的操作方式有:插入數(shù)據(jù)、刪除數(shù)據(jù)、查找數(shù)據(jù)、鎖定數(shù)據(jù)、解鎖數(shù)據(jù),在所述裝置的上述每一項操作中,均要對行鎖信息區(qū)域進行訪問,以獲取相應的行鎖;在無法得到行鎖的情況下,等待若干毫秒,重新對行鎖信息區(qū)域進行訪問;在得到行鎖后,訪問相應數(shù)據(jù);在成功刪除數(shù)據(jù)的同時,刪除行鎖信息。
[0008]在上述技術方案的基礎上,所述裝置對裝置內(nèi)部的記錄都對應存在一個關鍵字條目,對于記錄的增加、刪除、查找過程,都需要鎖定對應的關鍵字,同時提供鎖定記錄以及解鎖的功能;鎖定關鍵字時,只需在鎖定記錄關鍵字集合中插入相應數(shù)據(jù)。
[0009]本發(fā)明還提供一種利用上述裝置實現(xiàn)的基于碰撞探測的行級鎖定集合實現(xiàn)方法,包括以下步驟:
[0010]A、行鎖的加鎖:
[0011]步驟101、當向所述裝置中鎖定指定記錄時,首先由關鍵字提取函數(shù)提取出關鍵字;
[0012]步驟102、對關鍵字區(qū)域加鎖;
[0013]步驟103、判斷加鎖是否成功,如果成功,則轉(zhuǎn)到步驟104 ;否則,轉(zhuǎn)到步驟108 ;
[0014]步驟104、提取出關鍵字后,向鎖定記錄關鍵字集合插入該關鍵字,轉(zhuǎn)到步驟105 ;
[0015]步驟105、對關鍵字區(qū)域解鎖,轉(zhuǎn)到步驟106 ;
[0016]步驟106、操作記錄區(qū)域關鍵字對應數(shù)據(jù),轉(zhuǎn)到步驟107 ;
[0017]步驟107、返回成功,結(jié)束;
[0018]步驟108、判斷失敗次數(shù)是否小于N次,N為正整數(shù),如果失敗次數(shù)小于N次,則轉(zhuǎn)到步驟109 ;否則,轉(zhuǎn)到步驟110 ;
[0019]步驟109、休眠10毫秒,返回步驟102,嘗試加鎖;
[0020]步驟110、如果失敗次數(shù)大于N次,則返回失敗,結(jié)束。
[0021]在上述技術方案的基礎上,步驟110之后還包括以下步驟:
[0022]B、行鎖的解鎖:
[0023]步驟201、當向所述裝置中解鎖定指定記錄時,首先由記錄關鍵字提取函數(shù)提取出關鍵字;
[0024]步驟202、對關鍵字區(qū)域加鎖;
[0025]步驟203、判斷加鎖是否成功,如果成功,則轉(zhuǎn)到步驟204 ;否則,轉(zhuǎn)到步驟208 ;
[0026]步驟204、提取出關鍵字后,判斷鎖定記錄關鍵字集合是否存在該關鍵字,如果存在,則轉(zhuǎn)到步驟205 ;如果不存在,則轉(zhuǎn)到步驟206 ;
[0027]步驟205、刪除關鍵字區(qū)域?qū)年P鍵字,轉(zhuǎn)到步驟206 ;
[0028]步驟206、對關鍵字區(qū)域解鎖,轉(zhuǎn)到步驟207 ;
[0029]步驟207、返回成功,結(jié)束;
[0030]步驟208、判斷失敗次數(shù)是否小于N次,N為正整數(shù),如果失敗次數(shù)小于N次,則轉(zhuǎn)到步驟209 ;否則,轉(zhuǎn)到步驟210 ;
[0031]步驟209、休眠10毫秒,返回步驟202 ;
[0032]步驟210、如果失敗次數(shù)大于N次,則返回失敗,結(jié)束。
[0033]在上述技術方案的基礎上,步驟210之后還包括以下步驟:對于容器的所有操作:插入記錄、刪除記錄、查詢記錄,都是先獲取行鎖,然后再鎖定記錄區(qū)域,對記錄區(qū)域進行操作,具體步驟如下:
[0034]步驟301:發(fā)起操作;
[0035]步驟302:對操作的記錄在容器中加行鎖;
[0036]步驟303:判斷加鎖是否成功,如果加鎖成功,則轉(zhuǎn)到步驟304;否則,轉(zhuǎn)到步驟309 ;
[0037]步驟304:對操作的記錄區(qū)域加鎖,轉(zhuǎn)到步驟305 ;
[0038]步驟305:對容器中的記錄區(qū)域執(zhí)行請求的操作,轉(zhuǎn)到步驟306 ;
[0039]步驟306:對操作的記錄區(qū)域解鎖,轉(zhuǎn)到步驟307 ;[0040]步驟307:解除行鎖,轉(zhuǎn)到步驟308 ;
[0041]步驟308:返回成功,結(jié)束;
[0042]步驟309:返回失敗,結(jié)束。
[0043]與現(xiàn)有技術相比,本發(fā)明的優(yōu)點如下:
[0044]本發(fā)明采取關鍵數(shù)據(jù)集合+輪詢探測的方式,在高并發(fā)條件下對集合進行高效訪問,集合中單條或多條記錄鎖定不影響全局操作。
【專利附圖】
【附圖說明】
[0045]圖1是本發(fā)明實施例中基于碰撞探測的行級鎖定集合實現(xiàn)裝置的結(jié)構(gòu)框圖。
[0046]圖2為本發(fā)明實施例中行鎖的加鎖的流程圖。
[0047]圖3為本發(fā)明實施例中行鎖的解鎖的流程圖。
[0048]圖4為本發(fā)明實施例中容器記錄操作與行鎖關系的示意圖。
【具體實施方式】
[0049]下面結(jié)合附圖及具體實施例對本發(fā)明作進一步的詳細描述。
[0050]參見圖1所示,本發(fā)明實施例提供一種基于碰撞探測的行級鎖定集合實現(xiàn)裝置,包括鎖定記錄關鍵字集合和記錄集合,鎖定記錄關鍵字集合包括互斥鎖和關鍵字提取函數(shù),互斥鎖是操作系統(tǒng)提供的常規(guī)的互斥鎖;關鍵字提取函數(shù)是將記錄中的關鍵字抽取出來的功能函數(shù),由定義該集合的用戶自行定義,具備通用性;
[0051]鎖定記錄關鍵字集合,用于:進行行級鎖定時,依據(jù)記錄關鍵字提取函數(shù)從需要鎖定的記錄中抽出關鍵字,將關鍵字插入到鎖定記錄關鍵字集合中;鎖定記錄關鍵字集合為有序且成員唯一的集合,具備插入相同記錄時返回錯誤的特性,該集合由需要行鎖定的記錄的關鍵字對象組成;鎖定記錄關鍵字由用戶定義,必須實現(xiàn)關鍵字之間的小于比較方法;
[0052]記錄集合是容納所有記錄的唯一性關聯(lián)容器,容器中的對象類型為記錄類型,容器的唯一性、排序依據(jù)為記錄中的關鍵字,而關鍵字由關鍵字提取函數(shù)在記錄中提取。
[0053]本裝置對外提供的操作方式有:插入數(shù)據(jù)、刪除數(shù)據(jù)、查找數(shù)據(jù)、鎖定數(shù)據(jù)、解鎖數(shù)據(jù)。在本裝置的上述每一項操作中,對行鎖信息區(qū)域都要進行訪問,以獲取相應的行鎖;在無法得到行鎖的情況下,等待若干毫秒,重新對行鎖信息區(qū)域進行訪問;在得到行鎖后,訪問相應數(shù)據(jù)。在成功刪除數(shù)據(jù)的同時,刪除行鎖信息。
[0054]本裝置對裝置內(nèi)部的記錄都對應存在一個關鍵字條目,對于記錄的增力口、刪除、查找過程都需要鎖定對應的關鍵字,同時提供鎖定記錄以及解鎖的功能。這樣保證外部需要持有保持不變的數(shù)據(jù),只需要通過持有對應關鍵字,就能夠保證相應數(shù)據(jù)被鎖定,不會被修改、刪除、讀取,保證數(shù)據(jù)的一致性。鎖定關鍵字時,只需要在鎖定記錄關鍵字集合中插入相應數(shù)據(jù),而不需要額外的系統(tǒng)資源,能夠保證提供無限制數(shù)量的行鎖,同時保證不同關鍵字記錄的操作互不影響。
[0055]本發(fā)明實施例提供一種利用上述裝置實現(xiàn)的基于碰撞探測的行級鎖定集合實現(xiàn)方法,包括以下步驟:
[0056]A、參見圖2所示,行鎖的加鎖:[0057]步驟101、當向本裝置中鎖定指定記錄時,首先由關鍵字提取函數(shù)提取出關鍵字;
[0058]步驟102、對關鍵字區(qū)域加鎖;
[0059]步驟103、判斷加鎖是否成功,如果成功,則轉(zhuǎn)到步驟104 ;否則,轉(zhuǎn)到步驟108 ;
[0060]步驟104、提取出關鍵字后,向鎖定記錄關鍵字集合插入該關鍵字,轉(zhuǎn)到步驟105 ;
[0061]步驟105、對關鍵字區(qū)域解鎖,轉(zhuǎn)到步驟106 ;
[0062]步驟106、操作記錄區(qū)域關鍵字對應數(shù)據(jù),轉(zhuǎn)到步驟107 ;
[0063]步驟107、返回成功,結(jié)束;
[0064]步驟108、判斷失敗次數(shù)是否小于N次,N為正整數(shù),如果失敗次數(shù)小于N次,則轉(zhuǎn)到步驟109 ;否則,轉(zhuǎn)到步驟110 ;
[0065]步驟109、休眠10毫秒,返回步驟102,嘗試加鎖;
[0066]步驟110、如果失敗次數(shù)大于N次,則返回失敗,結(jié)束。
[0067]步驟110之后還包括以下步驟:
[0068]B、參見圖3所示,行鎖的解鎖:
[0069]步驟201、當向本裝置中解鎖定指定記錄時,首先由記錄關鍵字提取函數(shù)提取出關鍵字;
[0070]步驟202、對關鍵字區(qū)域加鎖;
[0071]步驟203、判斷加鎖是否成功,如果成功,則轉(zhuǎn)到步驟204 ;否則,轉(zhuǎn)到步驟208 ;
[0072]步驟204、提取出關鍵字后,判斷鎖定記錄關鍵字集合是否存在該關鍵字,如果存在,則轉(zhuǎn)到步驟205 ;如果不存在,則轉(zhuǎn)到步驟206 ;
[0073]步驟205、刪除關鍵字區(qū)域?qū)年P鍵字,轉(zhuǎn)到步驟206 ;
[0074]步驟206、對關鍵字區(qū)域解鎖,轉(zhuǎn)到步驟207 ;
[0075]步驟207、返回成功,結(jié)束;
[0076]步驟208、判斷失敗次數(shù)是否小于N次,N為正整數(shù),如果失敗次數(shù)小于N次,則轉(zhuǎn)到步驟209 ;否則,轉(zhuǎn)到步驟210 ;
[0077]步驟209、休眠10毫秒,返回步驟202 ;
[0078]步驟210、如果失敗次數(shù)大于N次,則返回失敗,結(jié)束。
[0079]在對容器中記錄加行鎖以后,當不需要行鎖時,則需要進行釋放,而釋放行鎖的原理在于清除鎖定記錄關鍵字集合中的關鍵字:對關鍵字區(qū)域加鎖,在關鍵字區(qū)域清除對應關鍵字,對關鍵字區(qū)域解鎖。
[0080]本裝置對容器的操作分為鎖定操作與記錄操作2種。前者是供使用者長時間的鎖定某一條記錄,防止其他使用者修改而設計的操作;而后者則是通用的操作行為。
[0081]步驟210之后還包括以下步驟:
[0082]對于容器的所有操作:插入記錄、刪除記錄、查詢記錄,都是先獲取行鎖,然后再鎖定記錄區(qū)域,對記錄區(qū)域進行操作,參見圖4所示,具體步驟如下:
[0083]步驟301:發(fā)起操作;
[0084]步驟302:對操作的記錄在容器中加行鎖;
[0085]步驟303:判斷加鎖是否成功,如果加鎖成功,則轉(zhuǎn)到步驟304;否則,轉(zhuǎn)到步驟309 ;
[0086]步驟304:對操作的記錄區(qū)域加鎖,轉(zhuǎn)到步驟305 ;[0087]步驟305:對容器中的記錄區(qū)域執(zhí)行請求的操作,轉(zhuǎn)到步驟306 ;
[0088]步驟306:對操作的記錄區(qū)域解鎖,轉(zhuǎn)到步驟307 ;
[0089]步驟307:解除行鎖,轉(zhuǎn)到步驟308 ;
[0090]步驟308:返回成功,結(jié)束;
[0091]步驟309:返回失敗,結(jié)束。
[0092]鎖定操作由于對具體的行記錄進行了鎖定,其他記錄操作在需要對已鎖定的記錄操作時,則必須獲得相應的行鎖,這樣本裝置既能夠保證對裝置內(nèi)記錄數(shù)據(jù)的多線程操作安全,又能夠提供行級排他鎖定能力,提供多個外部調(diào)用者使用,分別鎖定,操作不同的記錄。
[0093]本領域的技術人員可以對本發(fā)明實施例進行各種修改和變型,倘若這些修改和變型在本發(fā)明權(quán)利要求及其等同技術的范圍之內(nèi),則這些修改和變型也在本發(fā)明的保護范圍之內(nèi)。
[0094]說明書中未詳細描述的內(nèi)容為本領域技術人員公知的現(xiàn)有技術。
【權(quán)利要求】
1.一種基于碰撞探測的行級鎖定集合實現(xiàn)裝置,其特征在于:包括鎖定記錄關鍵字集合和記錄集合,所述鎖定記錄關鍵字集合包括互斥鎖和關鍵字提取函數(shù),互斥鎖是操作系統(tǒng)提供的常規(guī)互斥鎖;關鍵字提取函數(shù)是將記錄中的關鍵字抽取出來的功能函數(shù),由定義該集合的用戶自行定義; 所述鎖定記錄關鍵字集合,用于:進行行級鎖定時,依據(jù)記錄關鍵字提取函數(shù)從需要鎖定的記錄中抽出關鍵字,將關鍵字插入到鎖定記錄關鍵字集合中;鎖定記錄關鍵字集合為有序且成員唯一的集合,具備插入相同記錄時返回錯誤的特性,該集合由需要行鎖定的記錄的關鍵字對象組成;鎖定記錄關鍵字由用戶定義; 所述記錄集合是容納所有記錄的唯一性關聯(lián)容器,容器中的對象類型為記錄類型,容器的唯一性、排序依據(jù)為記錄中的關鍵字,而關鍵字由關鍵字提取函數(shù)在記錄中提取。
2.如權(quán)利要求1所述的基于碰撞探測的行級鎖定集合實現(xiàn)裝置,其特征在于:所述裝置對外提供的 操作方式有:插入數(shù)據(jù)、刪除數(shù)據(jù)、查找數(shù)據(jù)、鎖定數(shù)據(jù)、解鎖數(shù)據(jù),在所述裝置的上述每一項操作中,均要對行鎖信息區(qū)域進行訪問,以獲取相應的行鎖;在無法得到行鎖的情況下,等待若干毫秒,重新對行鎖信息區(qū)域進行訪問;在得到行鎖后,訪問相應數(shù)據(jù);在成功刪除數(shù)據(jù)的同時,刪除行鎖信息。
3.如權(quán)利要求1或2所述的基于碰撞探測的行級鎖定集合實現(xiàn)裝置,其特征在于:所述裝置對裝置內(nèi)部的記錄都對應存在一個關鍵字條目,對于記錄的增加、刪除、查找過程,都需要鎖定對應的關鍵字,同時提供鎖定記錄以及解鎖的功能;鎖定關鍵字時,只需在鎖定記錄關鍵字集合中插入相應數(shù)據(jù)。
4.利用權(quán)利要求1至3中任一項所述裝置實現(xiàn)的基于碰撞探測的行級鎖定集合實現(xiàn)方法,其特征在于,包括以下步驟: A、行鎖的加鎖: 步驟101、當向所述裝置中鎖定指定記錄時,首先由關鍵字提取函數(shù)提取出關鍵字; 步驟102、對關鍵字區(qū)域加鎖; 步驟103、判斷加鎖是否成功,如果成功,則轉(zhuǎn)到步驟104 ;否則,轉(zhuǎn)到步驟108 ; 步驟104、提取出關鍵字后,向鎖定記錄關鍵字集合插入該關鍵字,轉(zhuǎn)到步驟105 ; 步驟105、對關鍵字區(qū)域解鎖,轉(zhuǎn)到步驟106 ; 步驟106、操作記錄區(qū)域關鍵字對應數(shù)據(jù),轉(zhuǎn)到步驟107 ; 步驟107、返回成功,結(jié)束; 步驟108、判斷失敗次數(shù)是否小于N次,N為正整數(shù),如果失敗次數(shù)小于N次,則轉(zhuǎn)到步驟109 ;否則,轉(zhuǎn)到步驟110 ; 步驟109、休眠10毫秒,返回步驟102,嘗試加鎖; 步驟110、如果失敗次數(shù)大于N次,則返回失敗,結(jié)束。
5.如權(quán)利要求4所述的基于碰撞探測的行級鎖定集合實現(xiàn)方法,其特征在于:步驟110之后還包括以下步驟: B、行鎖的解鎖: 步驟201、當向所述裝置中解鎖定指定記錄時,首先由記錄關鍵字提取函數(shù)提取出關鍵字; 步驟202、對關鍵字區(qū)域加鎖;步驟203、判斷加鎖是否成功,如果成功,則轉(zhuǎn)到步驟204 ;否則,轉(zhuǎn)到步驟208 ; 步驟204、提取出關鍵字后,判斷鎖定記錄關鍵字集合是否存在該關鍵字,如果存在,則轉(zhuǎn)到步驟205 ;如果不存在,則轉(zhuǎn)到步驟206 ; 步驟205、刪除關鍵字區(qū)域?qū)年P鍵字,轉(zhuǎn)到步驟206 ; 步驟206、對關鍵字區(qū)域解鎖,轉(zhuǎn)到步驟207 ; 步驟207、返回成功,結(jié)束; 步驟208、判斷失敗次數(shù)是否小于N次,N為正整數(shù),如果失敗次數(shù)小于N次,則轉(zhuǎn)到步驟209 ;否則,轉(zhuǎn)到步驟210 ; 步驟209、休眠10毫秒,返回步驟202 ; 步驟210、如果失敗次數(shù)大于N次,則返回失敗,結(jié)束。
6.如權(quán)利要求5所述的基于碰撞探測的行級鎖定集合實現(xiàn)方法,其特征在于:步驟210之后還包括以下步驟:對于容器的所有操作:插入記錄、刪除記錄、查詢記錄,都是先獲取行鎖,然后再鎖定記錄區(qū)域,對記錄區(qū)域進行操作,具體步驟如下: 步驟301:發(fā)起操作; 步驟302:對操作 的記錄在容器中加行鎖; 步驟303:判斷加鎖是否成功,如果加鎖成功,則轉(zhuǎn)到步驟304 ;否則,轉(zhuǎn)到步驟309 ; 步驟304:對操作的記錄區(qū)域加鎖,轉(zhuǎn)到步驟305 ; 步驟305:對容器中的記錄區(qū)域執(zhí)行請求的操作,轉(zhuǎn)到步驟306 ; 步驟306:對操作的記錄區(qū)域解鎖,轉(zhuǎn)到步驟307 ; 步驟307:解除行鎖,轉(zhuǎn)到步驟308 ; 步驟308:返回成功,結(jié)束; 步驟309:返回失敗,結(jié)束。
【文檔編號】G06F9/46GK104008133SQ201410187950
【公開日】2014年8月27日 申請日期:2014年5月6日 優(yōu)先權(quán)日:2014年5月6日
【發(fā)明者】黃亮 申請人:烽火通信科技股份有限公司