一種范圍鎖的實(shí)現(xiàn)方法及裝置制造方法
【專利摘要】本發(fā)明公開一種范圍鎖的實(shí)現(xiàn)方法及裝置,該方法包括:接收第一請(qǐng)求,其中,所述第一請(qǐng)求包含第一區(qū)間的區(qū)間信息和鎖權(quán)限信息;將所述第一區(qū)間與本地存儲(chǔ)的已授權(quán)區(qū)間進(jìn)行比對(duì);若所述第一區(qū)間是所述已授權(quán)區(qū)間中第二區(qū)間的子集,則根據(jù)預(yù)設(shè)的沖突判斷規(guī)則確定所述第一區(qū)間的鎖權(quán)限信息與所述第二區(qū)間的鎖權(quán)限信息是否沖突;如果所述第一區(qū)間的鎖權(quán)限信息與所述第二區(qū)間的鎖權(quán)限信息不沖突,則返回所述第一區(qū)間的區(qū)間信息和鎖權(quán)限信息。本發(fā)明實(shí)施例所提供的方案能夠提高范圍鎖的沖突檢測(cè)性能。
【專利說明】—種范圍鎖的實(shí)現(xiàn)方法及裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及電子【技術(shù)領(lǐng)域】,尤其涉及一種范圍鎖的實(shí)現(xiàn)方法及裝置。
【背景技術(shù)】
[0002]分布式鎖是在集群系統(tǒng)中實(shí)現(xiàn)跨節(jié)點(diǎn)互斥訪問共享資源的一種方式。在大型應(yīng)用系統(tǒng)中,對(duì)單個(gè)文件(如數(shù)據(jù)庫(kù)文件)以文件為粒度的跨節(jié)點(diǎn)互斥訪問無法滿足系統(tǒng)的高并發(fā)要求,故產(chǎn)生了范圍鎖,實(shí)現(xiàn)對(duì)大文件/資源的按字節(jié)范圍加鎖,以最大程度滿足應(yīng)用系統(tǒng)的并發(fā)訪問要求。
[0003]范圍鎖中的范圍,還可以非“字節(jié)”為單位進(jìn)行擴(kuò)展,如描述條帶、塊等。
[0004]因加鎖的粒度不再為“是”或“非”,而是眾多隨機(jī)的、可能重疊或相鄰的、離散的區(qū)間,每個(gè)區(qū)間又可能存在不同的持有者(以下簡(jiǎn)稱owner),故范圍鎖數(shù)據(jù)結(jié)構(gòu)的組織遠(yuǎn)比非范圍鎖要復(fù)雜,其加鎖性能也大幅下降。
[0005]現(xiàn)有技術(shù)中組織范圍鎖數(shù)據(jù)結(jié)構(gòu)的方案可以通過紅黑樹實(shí)現(xiàn),具體實(shí)現(xiàn)可以是:
[0006]將所有區(qū)間組織到紅黑樹中,利用平衡二叉樹的特性加速區(qū)間的查找。這樣的紅黑樹也叫區(qū)間樹,典型的區(qū)間樹如圖1所示。在區(qū)間樹中,每個(gè)節(jié)點(diǎn)至少要包含三個(gè)屬性:
[0007]區(qū)間信息:區(qū)間的起始端點(diǎn)(start)和結(jié)束端點(diǎn)(end),如圖1中的第一個(gè)節(jié)點(diǎn)[5,10],其中起始端點(diǎn)為5、結(jié)束端點(diǎn)為10 ;
[0008]最大端點(diǎn)(MaxEnd):記錄了本節(jié)點(diǎn)和本節(jié)點(diǎn)所有子節(jié)點(diǎn)中最大的端點(diǎn)值。所以,[start, MaxEnd]描述了本節(jié)點(diǎn)和右子樹所能描述的最大區(qū)間
[0009]持有者列表(OwnerList):記錄了當(dāng)前持有這個(gè)區(qū)間的所有持有者信息,一個(gè)持有者即是這個(gè)區(qū)間的申請(qǐng)者。
[0010]使用紅黑樹,可以獲得O(1gn)的查找性能,適用于大規(guī)格的分布式系統(tǒng)中。為了查找沖突,需要找到樹中所有與給定區(qū)間重疊的區(qū)間,因?yàn)闃渲兄丿B的區(qū)間可能分布在不同的分支中,故可能需要遍歷多個(gè)分支才能完成這個(gè)查找,最壞情況下需要遍歷整棵樹(例如申請(qǐng)的區(qū)間很大,與樹中所有區(qū)間都重疊)。綜上:通過紅黑樹組織的數(shù)據(jù)結(jié)構(gòu)記錄范圍鎖后,如果再對(duì)一個(gè)新的范圍加鎖時(shí),需要遍歷紅黑樹表中的多棵樹和多個(gè)分支,所以會(huì)造成操作繁復(fù)不便實(shí)現(xiàn)的問題。
【發(fā)明內(nèi)容】
[0011]本發(fā)明提供一種范圍鎖的實(shí)現(xiàn)方法及裝置,本發(fā)明所提供的方法和裝置解決現(xiàn)有技術(shù)中通過紅黑樹組織的數(shù)據(jù)結(jié)構(gòu)記錄范圍鎖后,如果再對(duì)一個(gè)新的范圍加鎖時(shí),需要遍歷紅黑樹表中的多棵樹和多個(gè)分支,所以會(huì)造成操作繁復(fù)不便實(shí)現(xiàn)的問題。
[0012]第一方面,提供一種范圍鎖的實(shí)現(xiàn)方法,該方法包括:
[0013]接收第一請(qǐng)求,其中,所述第一請(qǐng)求包含第一區(qū)間的區(qū)間信息和鎖權(quán)限信息;
[0014]將所述第一區(qū)間與本地存儲(chǔ)的已授權(quán)區(qū)間進(jìn)行比對(duì);
[0015]若所述第一區(qū)間是所述已授權(quán)區(qū)間中第二區(qū)間的子集,則根據(jù)預(yù)設(shè)的沖突判斷規(guī)則確定所述第一區(qū)間的鎖權(quán)限信息與所述第二區(qū)間的鎖權(quán)限信息是否沖突;
[0016]如果所述第一區(qū)間的鎖權(quán)限信息與所述第二區(qū)間的鎖權(quán)限信息不沖突,則返回所述第一區(qū)間的區(qū)間信息和鎖權(quán)限信息。
[0017]結(jié)合第一方面,在第一種可能的實(shí)現(xiàn)方式中,所述已授權(quán)區(qū)間的區(qū)間信息和鎖權(quán)限信息以紅黑樹的方式記錄;
[0018]所述方法還包括:將所述第一區(qū)間的區(qū)間信息和鎖權(quán)限信息加入到紅黑樹中。
[0019]結(jié)合第一方面,或者第一方面的第一種可能的實(shí)現(xiàn)方式,在第二種可能的實(shí)現(xiàn)方式中,當(dāng)所述已授權(quán)區(qū)間有多個(gè)時(shí),其中,任意兩個(gè)已授權(quán)區(qū)間存在重疊部分,則所述任意兩個(gè)已授權(quán)區(qū)間的鎖權(quán)限信息不沖突。
[0020]結(jié)合第一方面,或者第一方面的第一至第二種可能的實(shí)現(xiàn)方式,在第三種可能的實(shí)現(xiàn)方式中,所述鎖權(quán)限信息包括:對(duì)數(shù)據(jù)執(zhí)行讀操作或?qū)懖僮鞯逆i權(quán)限信息。
[0021]結(jié)合第一方面,或者第一方面的第一至第三種可能的實(shí)現(xiàn)方式,在第四種可能的實(shí)現(xiàn)方式中,根據(jù)預(yù)設(shè)的沖突判斷規(guī)則確定所述第一區(qū)間的鎖權(quán)限信息與所述第二區(qū)間的鎖權(quán)限信息是否有沖突包括:
[0022]當(dāng)所述第一區(qū)間的鎖權(quán)限信息與所述第二區(qū)間的鎖權(quán)限信息不相同,則確定所述第一區(qū)間的鎖權(quán)限信息與所述第二區(qū)間的鎖權(quán)限信息沖突;
[0023]當(dāng)對(duì)所述第一區(qū)間的鎖權(quán)限信息與所述第二區(qū)間的鎖權(quán)限信息相同,則確定第一區(qū)間的鎖權(quán)限信息與所述第二區(qū)間的鎖權(quán)限信息是否為讀取操作,如果是,則確定所述第一區(qū)間的鎖權(quán)限信息與所述第二區(qū)間的鎖權(quán)限信息不沖突;否則,所述第一區(qū)間的鎖權(quán)限信息與所述第二區(qū)間的鎖權(quán)限信息沖突。
[0024]結(jié)合第一方面,或者第一方面的第一至第四種可能的實(shí)現(xiàn)方式,在第五種可能的實(shí)現(xiàn)方式中,該方法還包括:
[0025]若所述已授權(quán)區(qū)間中不包含所述第一區(qū)間,則返回所述第一區(qū)間的區(qū)間信息和鎖權(quán)限信息;或
[0026]若所述已授權(quán)區(qū)間與所述第一區(qū)間有重合部分,則遍歷已授權(quán)區(qū)間,確定所述第一區(qū)間的區(qū)間信息和鎖權(quán)限信息是否與所述已授權(quán)區(qū)間的區(qū)間信息和鎖權(quán)限信息沖突;如果沖突則將所述第一請(qǐng)求放入等待隊(duì)列或返回拒絕的響應(yīng)消息;如果不沖突,返回所述第一區(qū)間的區(qū)間信息和鎖權(quán)限信息。
[0027]第二方面,提供一種范圍鎖的實(shí)現(xiàn)裝置,該裝置包括:
[0028]接收模塊,用于接收第一請(qǐng)求,其中,所述第一請(qǐng)求包含第一區(qū)間的區(qū)間信息和鎖權(quán)限信息;
[0029]比對(duì)模塊,用于將所述第一區(qū)間與本地存儲(chǔ)的已授權(quán)區(qū)間進(jìn)行比對(duì);
[0030]沖突判斷模塊,用于若所述第一區(qū)間是所述已授權(quán)區(qū)間中第二區(qū)間的子集,則根據(jù)預(yù)設(shè)的沖突判斷規(guī)則確定所述第一區(qū)間的鎖權(quán)限信息與所述第二區(qū)間的鎖權(quán)限信息是否沖突;
[0031]授權(quán)模塊,用于如果所述第一區(qū)間的鎖權(quán)限信息與所述第二區(qū)間的鎖權(quán)限信息不沖突,則返回所述第一區(qū)間的區(qū)間信息和鎖權(quán)限信息。
[0032]結(jié)合第二方面,在第一種可能的實(shí)現(xiàn)方式中,該裝置還包括存儲(chǔ)模塊,用于以紅黑樹的方式記錄所述已授權(quán)區(qū)間的區(qū)間信息和鎖權(quán)限信息,并將所述第一區(qū)間的區(qū)間信息和鎖權(quán)限信息加入到紅黑樹中。
[0033]結(jié)合第二方面,或者第一方面的第一種可能的實(shí)現(xiàn)方式,在第二種可能的實(shí)現(xiàn)方式中,沖突判斷模塊具體用于當(dāng)所述第一區(qū)間的鎖權(quán)限信息與所述第二區(qū)間的鎖權(quán)限信息不相同,則確定所述第一區(qū)間的鎖權(quán)限信息與所述第二區(qū)間的鎖權(quán)限信息沖突;當(dāng)對(duì)所述第一區(qū)間的鎖權(quán)限信息與所述第二區(qū)間的鎖權(quán)限信息相同,則確定第一區(qū)間的鎖權(quán)限信息與所述第二區(qū)間的鎖權(quán)限信息是否為讀取操作,如果是,則確定所述第一區(qū)間的鎖權(quán)限信息與所述第二區(qū)間的鎖權(quán)限信息不沖突;否則,所述第一區(qū)間的鎖權(quán)限信息與所述第二區(qū)間的鎖權(quán)限信息沖突。
[0034]結(jié)合第二方面,或者第一方面的第一至第二種可能的實(shí)現(xiàn)方式,在第三種可能的實(shí)現(xiàn)方式中,該裝置還包括:
[0035]遍歷模塊,用于遍歷已授權(quán)的區(qū)間,若所述已授權(quán)區(qū)間中不包含所述第一區(qū)間,則返回所述第一區(qū)間的區(qū)間信息和鎖權(quán)限信息;若所述已授權(quán)區(qū)間與所述第一區(qū)間有重合部分,則遍歷已授權(quán)區(qū)間,確定所述第一區(qū)間的區(qū)間信息和鎖權(quán)限信息是否與所述已授權(quán)區(qū)間的區(qū)間信息和鎖權(quán)限信息沖突;如果沖突則將所述第一請(qǐng)求放入等待隊(duì)列或返回拒絕的響應(yīng)消息;如果不沖突,返回所述第一區(qū)間的區(qū)間信息和鎖權(quán)限信息。
[0036]上述技術(shù)方案中的一個(gè)或兩個(gè),至少具有如下技術(shù)效果:
[0037]本發(fā)明實(shí)施例所提供的方法和裝置所提供的預(yù)設(shè)樹表中標(biāo)示了每個(gè)范圍鎖的權(quán)限,而且是權(quán)限不沖突的區(qū)間才會(huì)插入到同一樹表中,所以如果存在第一范圍鎖,就不能存在與第一范圍鎖的區(qū)間重疊且權(quán)限沖突的第二范圍鎖。所以,當(dāng)一個(gè)范圍鎖請(qǐng)求的區(qū)間被一個(gè)已經(jīng)授權(quán)出去的權(quán)限不沖突的范圍鎖包含時(shí),則可以確定不會(huì)出現(xiàn)與該新請(qǐng)求沖突的授權(quán)在樹中,所以在遍歷的過程中只要查找到包含且權(quán)限不沖突的范圍鎖,則可以停止遍歷,給行新申請(qǐng)的范圍鎖授權(quán)。所以采用本發(fā)明實(shí)施例所提供的方案能夠提高范圍鎖的沖突檢測(cè)性能。
【專利附圖】
【附圖說明】
[0038]圖1為現(xiàn)有技術(shù)提供的紅黑樹表的結(jié)構(gòu)不意圖;
[0039]圖2為本發(fā)明實(shí)施例一種范圍鎖的實(shí)現(xiàn)方法的流程示意圖;
[0040]圖3為本發(fā)明實(shí)施例中預(yù)設(shè)樹表中一個(gè)節(jié)點(diǎn)的示意圖;
[0041]圖4為本發(fā)明實(shí)施例中一種范圍鎖的實(shí)現(xiàn)裝置的結(jié)構(gòu)示意圖;
[0042]圖5為本發(fā)明實(shí)施例中另一種范圍鎖的實(shí)現(xiàn)裝置的結(jié)構(gòu)示意圖;
[0043]圖6為本發(fā)明實(shí)施例預(yù)設(shè)樹表的具體實(shí)例示意圖。
【具體實(shí)施方式】
[0044]為使本發(fā)明實(shí)施例的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0045]下面結(jié)合說明書附圖對(duì)本發(fā)明實(shí)施例作進(jìn)一步詳細(xì)描述。
[0046]如圖2所示,本發(fā)明實(shí)施例提供一種范圍鎖的實(shí)現(xiàn)方法,該方法具體包括以下實(shí)現(xiàn)步驟:
[0047]步驟201,接收第一請(qǐng)求,其中,所述第一請(qǐng)求包含第一區(qū)間的區(qū)間信息和鎖權(quán)限信息;
[0048]步驟202,將所述第一區(qū)間與本地存儲(chǔ)的已授權(quán)區(qū)間進(jìn)行比對(duì);
[0049]在本發(fā)明實(shí)施例中,已授權(quán)區(qū)間可以通過預(yù)設(shè)表的方式存儲(chǔ)在本地,而且該預(yù)設(shè)表中包含已授權(quán)區(qū)間的區(qū)間信息和的鎖權(quán)限信息;所述已授權(quán)區(qū)間的區(qū)間信息和鎖權(quán)限信息以紅黑樹的方式記錄。樹表中每個(gè)節(jié)點(diǎn)至少要包含三個(gè)屬性:已授權(quán)區(qū)間的區(qū)間信息、最大端點(diǎn)和每個(gè)區(qū)間鎖的鎖權(quán)限信息(該樹表中每個(gè)節(jié)點(diǎn)可以是圖3所示的結(jié)構(gòu),樹表的完整結(jié)構(gòu)如圖4所示)。其中:
[0050]區(qū)間信息:區(qū)間的起始端點(diǎn)(start)和結(jié)束端點(diǎn)(end),如圖2中的第一個(gè)節(jié)點(diǎn)[5,10],其中起始端點(diǎn)為5、結(jié)束端點(diǎn)為10 ;
[0051]最大端點(diǎn)(MaxEnd):記錄了本節(jié)點(diǎn)和本節(jié)點(diǎn)所有子節(jié)點(diǎn)中最大的端點(diǎn)值。所以,[start, MaxEnd]描述了本節(jié)點(diǎn)和右子樹所能描述的最大區(qū)間。
[0052]區(qū)間鎖的鎖權(quán)限信息:對(duì)數(shù)據(jù)執(zhí)行讀操作或?qū)懖僮鞯逆i權(quán)限信息。其中,主要利用讀操作或?qū)懖僮鬟M(jìn)行說明;例如:第一個(gè)節(jié)點(diǎn)中區(qū)間鎖的鎖權(quán)限信息的標(biāo)示為“R”,則表示持有者可以對(duì)區(qū)間[5,10]中的數(shù)據(jù)執(zhí)行讀操作。
[0053]另外,在實(shí)現(xiàn)本發(fā)明提供的方案時(shí),如果紅黑樹中有多個(gè)已授權(quán)區(qū)間,其中,任意兩個(gè)已授權(quán)區(qū)間存在重疊部分,則所述任意兩個(gè)已授權(quán)區(qū)間的鎖權(quán)限信息不沖突。即當(dāng)某個(gè)已授權(quán)區(qū)間與其他已授權(quán)區(qū)間有重疊部分,則對(duì)應(yīng)的兩個(gè)已授權(quán)區(qū)間的鎖權(quán)限信息不沖突,則所述某一個(gè)已授權(quán)區(qū)間與所述其他已授權(quán)區(qū)間不重疊。
[0054]步驟203,若所述第一區(qū)間是所述已授權(quán)區(qū)間中第二區(qū)間的子集,則根據(jù)預(yù)設(shè)的沖突判斷規(guī)則確定所述第一區(qū)間的鎖權(quán)限信息與所述第二區(qū)間的鎖權(quán)限信息是否沖突;
[0055]在本發(fā)明實(shí)施例中,確定第一區(qū)間是否為第二區(qū)間的子集的方式可以是:
[0056]通過區(qū)間信息中的起始端點(diǎn)(start)和結(jié)束端點(diǎn)(end),可以確定每個(gè)區(qū)間所包括的范圍。當(dāng)確定第一區(qū)間所包括的范圍在第二區(qū)間所包括的范圍中,則可以確定第一區(qū)間是否為第二區(qū)間的子集。
[0057]步驟204,如果所述第一區(qū)間的鎖權(quán)限信息與所述第二區(qū)間的鎖權(quán)限信息不沖突,則返回所述第一區(qū)間的區(qū)間信息和鎖權(quán)限信息。
[0058]另外,若沒有包含第一區(qū)間的已授權(quán)區(qū)間,則通過遍歷已授權(quán)區(qū)間的方式進(jìn)一步的判斷是否授權(quán)第一請(qǐng)求,具體實(shí)現(xiàn)可以是:
[0059]若所述已授權(quán)區(qū)間中不包含所述第一區(qū)間,則返回所述第一區(qū)間的區(qū)間信息和鎖權(quán)限信息;或
[0060]若所述已授權(quán)區(qū)間與所述第一區(qū)間有重合部分,則遍歷已授權(quán)區(qū)間,確定所述第一區(qū)間的區(qū)間信息和鎖權(quán)限信息是否與所述已授權(quán)區(qū)間的區(qū)間信息和鎖權(quán)限信息沖突;如果沖突則將所述第一請(qǐng)求放入等待隊(duì)列或返回拒絕的響應(yīng)消息;如果不沖突,返回所述第一區(qū)間的區(qū)間信息和鎖權(quán)限信息。
[0061]本發(fā)明實(shí)施例方法中紅黑樹中標(biāo)示了每個(gè)范圍鎖的權(quán)限,而且是權(quán)限不沖突的區(qū)間才會(huì)插入到同一樹表中,所以如果存在第一范圍鎖,就不能存在與第一范圍鎖的區(qū)間重疊且權(quán)限沖突的第二范圍鎖。所以,當(dāng)一個(gè)范圍鎖請(qǐng)求的區(qū)間被一個(gè)已經(jīng)授權(quán)出去的權(quán)限不沖突的范圍鎖包含時(shí),則可以確定不會(huì)出現(xiàn)與該新請(qǐng)求沖突的授權(quán)在樹中,所以在遍歷的過程中只要查找到包含且權(quán)限不沖突的范圍鎖,則可以停止遍歷,給新申請(qǐng)的范圍鎖授權(quán)。所以采用本發(fā)明實(shí)施例所提供的方案能夠提高范圍鎖的沖突檢測(cè)性能。
[0062]以下結(jié)合具體的實(shí)例對(duì)本發(fā)明提供的一種范圍鎖實(shí)現(xiàn)方法作進(jìn)一步的說明,具體實(shí)現(xiàn)可以是:
[0063]在具體的范圍鎖應(yīng)用中,對(duì)數(shù)據(jù)進(jìn)行讀和寫操作加鎖是最普遍的現(xiàn)象。讀和寫操作存在以下特點(diǎn):
[0064]因?yàn)樽x取數(shù)據(jù)是非破壞性的操作,幾個(gè)程序同時(shí)讀取一個(gè)文件,是不會(huì)導(dǎo)致數(shù)據(jù)不一致的。但如果a用戶正在執(zhí)行讀操作時(shí),b用戶執(zhí)行寫操作,二者并發(fā)進(jìn)行。這種場(chǎng)景就會(huì)導(dǎo)致a用戶可能讀到的是舊的數(shù)據(jù),但存儲(chǔ)的可能是b用戶執(zhí)行寫操作后修改的新數(shù)據(jù),從而就會(huì)造成數(shù)據(jù)不一致。
[0065]例如:有個(gè)文件,里面只存了一個(gè)字母X。a用戶讀這個(gè)文件,b用戶同時(shí)對(duì)這個(gè)文件進(jìn)行寫操作。a用戶的讀操作先發(fā)生,a用戶就讀到了字母X ;a用戶完成讀操作之后,b用戶把數(shù)據(jù)修改為Y,則此時(shí)b用戶和a用戶看到的這個(gè)文件的數(shù)據(jù)就發(fā)生了不一致,從而出現(xiàn)數(shù)據(jù)混亂的問題。所以,需要對(duì)文件進(jìn)行加鎖保護(hù)。
[0066]在本發(fā)明實(shí)施例中,以區(qū)間鎖的鎖權(quán)限信息為讀操作和寫操作為例,則預(yù)設(shè)的沖突判斷規(guī)則可以是:
[0067]當(dāng)所述第一區(qū)間的鎖權(quán)限信息與所述第二區(qū)間的鎖權(quán)限信息不相同,則確定所述第一區(qū)間的鎖權(quán)限信息與所述第二區(qū)間的鎖權(quán)限信息沖突;
[0068]當(dāng)對(duì)所述第一區(qū)間的鎖權(quán)限信息與所述第二區(qū)間的鎖權(quán)限信息相同,則確定第一區(qū)間的鎖權(quán)限信息與所述第二區(qū)間的鎖權(quán)限信息是否為讀取操作,如果是,則確定所述第一區(qū)間的鎖權(quán)限信息與所述第二區(qū)間的鎖權(quán)限信息不沖突;否則,所述第一區(qū)間的鎖權(quán)限信息與所述第二區(qū)間的鎖權(quán)限信息沖突。
[0069]在具體實(shí)現(xiàn)時(shí),如圖4所示,如果用戶要申請(qǐng)的鎖的范圍為[8,9],申請(qǐng)的權(quán)限為讀(R)。根據(jù)圖4所示樹表的第一個(gè)節(jié)點(diǎn)可以確定,已有用戶申請(qǐng)了 [5,10]權(quán)限為讀操作的范圍鎖,[8,9]的范圍屬于范圍鎖[5,10]的子集,而且范圍鎖[8,9] R和范圍鎖[5,10] R的鎖權(quán)限信息都是讀操作,所以兩個(gè)范圍鎖不沖突。綜上,范圍鎖[8,9]R和范圍鎖[5,10]R的范圍為包含關(guān)系,而且權(quán)限不沖突,所以用戶要申請(qǐng)的范圍鎖[8,9]R可以進(jìn)行加鎖。
[0070]因?yàn)楸景l(fā)明實(shí)施例所提供的預(yù)設(shè)樹表中,讀寫權(quán)限放在同一樹中,而且是讀寫不沖突的區(qū)間才會(huì)插入到同一樹表中,所以如果存在范圍鎖[0,10]R,就不能存在與[0,10]R重疊的寫區(qū)間范圍鎖。所以,當(dāng)一個(gè)讀請(qǐng)求被一個(gè)已經(jīng)授權(quán)出去的讀請(qǐng)求包含時(shí),則可以確定沒有與該新請(qǐng)求沖突的授權(quán)在樹中,所以在遍歷的過程中只要查找到包含且權(quán)限不沖突的范圍鎖,則可以停止遍歷,給行新申請(qǐng)的范圍鎖授權(quán)。
[0071]如圖4所示,根據(jù)上述方法本發(fā)明實(shí)施例還提供一種范圍鎖的實(shí)現(xiàn)裝置,該裝置包括:
[0072]接收模塊401,用于接收第一請(qǐng)求,其中,所述第一請(qǐng)求包含第一區(qū)間的區(qū)間信息和鎖權(quán)限信息;
[0073]比對(duì)模塊402,用于將所述第一區(qū)間與本地存儲(chǔ)的已授權(quán)區(qū)間進(jìn)行比對(duì);
[0074]沖突判斷模塊403,用于若所述第一區(qū)間是所述已授權(quán)區(qū)間中第二區(qū)間的子集,則根據(jù)預(yù)設(shè)的沖突判斷規(guī)則確定所述第一區(qū)間的鎖權(quán)限信息與所述第二區(qū)間的鎖權(quán)限信息是否沖關(guān);
[0075]當(dāng)鎖權(quán)項(xiàng)只包括兩種:讀操作權(quán)限和寫操作權(quán)限時(shí),則沖突判斷模塊具體進(jìn)行沖突判斷包括:
[0076]當(dāng)所述第一區(qū)間的鎖權(quán)限信息與所述第二區(qū)間的鎖權(quán)限信息不相同,則確定所述第一區(qū)間的鎖權(quán)限信息與所述第二區(qū)間的鎖權(quán)限信息沖突;當(dāng)對(duì)所述第一區(qū)間的鎖權(quán)限信息與所述第二區(qū)間的鎖權(quán)限信息相同,則確定第一區(qū)間的鎖權(quán)限信息與所述第二區(qū)間的鎖權(quán)限信息是否為讀取操作,如果是,則確定所述第一區(qū)間的鎖權(quán)限信息與所述第二區(qū)間的鎖權(quán)限信息不沖突;否則,所述第一區(qū)間的鎖權(quán)限信息與所述第二區(qū)間的鎖權(quán)限信息沖突。
[0077]授權(quán)模塊404,用于如果所述第一區(qū)間的鎖權(quán)限信息與所述第二區(qū)間的鎖權(quán)限信息不沖突,則返回所述第一區(qū)間的區(qū)間信息和鎖權(quán)限信息。
[0078]為了方便比對(duì),在存儲(chǔ)已授權(quán)的區(qū)間鎖時(shí)候,可以按照一定的規(guī)則對(duì)區(qū)間所進(jìn)行存儲(chǔ),所以該裝置還包括:
[0079]存儲(chǔ)模塊,用于以紅黑樹的方式記錄所述已授權(quán)區(qū)間的區(qū)間信息和鎖權(quán)限信息,并將所述第一區(qū)間的區(qū)間信息和鎖權(quán)限信息加入到紅黑樹中。
[0080]其中,當(dāng)已授權(quán)區(qū)間有多個(gè)時(shí),其中,如果任意兩個(gè)已授權(quán)區(qū)間存在重疊部分,則所述任意兩個(gè)已授權(quán)區(qū)間的鎖權(quán)限信息不沖突。
[0081]上述方式對(duì)當(dāng)前請(qǐng)求區(qū)間被已授權(quán)區(qū)間包含的情況,對(duì)于當(dāng)前區(qū)間沒有被已授權(quán)區(qū)間完全包含的情況,該裝置可以通過遍歷的方式實(shí)現(xiàn)區(qū)間鎖的授權(quán),則該裝置還可以包括:
[0082]遍歷模塊,用于遍歷已授權(quán)的區(qū)間,若所述已授權(quán)區(qū)間中不包含所述第一區(qū)間,則返回所述第一區(qū)間的區(qū)間信息和鎖權(quán)限信息;若所述已授權(quán)區(qū)間與所述第一區(qū)間有重合部分,則遍歷已授權(quán)區(qū)間,確定所述第一區(qū)間的區(qū)間信息和鎖權(quán)限信息是否與所述已授權(quán)區(qū)間的區(qū)間信息和鎖權(quán)限信息沖突;如果沖突則將所述第一請(qǐng)求放入等待隊(duì)列或返回拒絕的響應(yīng)消息;如果不沖突,返回所述第一區(qū)間的區(qū)間信息和鎖權(quán)限信息。
[0083]如圖5所示,本發(fā)明還提供另外一種范圍鎖的實(shí)現(xiàn)裝置,所述范圍鎖的實(shí)現(xiàn)裝置可以為前述實(shí)施例中的用戶設(shè)備,用于執(zhí)行前述各個(gè)實(shí)施例中的范圍鎖實(shí)現(xiàn)方法,該裝置包括至少一個(gè)處理器501 (例如CPU),至少一個(gè)網(wǎng)絡(luò)接口 502或者其他通信接口,存儲(chǔ)器503,和至少一個(gè)通信總線504,用于實(shí)現(xiàn)這些裝置之間的連接通信。處理器501用于執(zhí)行存儲(chǔ)器503中存儲(chǔ)的可執(zhí)行模塊,例如計(jì)算機(jī)程序。存儲(chǔ)器503可能包含高速隨機(jī)存取存儲(chǔ)器(RAM:Random Access Memory),也可能還包括非不穩(wěn)定的存儲(chǔ)器(non-volatile memory),例如至少一個(gè)磁盤存儲(chǔ)器。通過至少一個(gè)網(wǎng)絡(luò)接口 502 (可以是有線或者無線)實(shí)現(xiàn)該系統(tǒng)網(wǎng)關(guān)與至少一個(gè)其他網(wǎng)元之間的通信連接,可以使用互聯(lián)網(wǎng),廣域網(wǎng),本地網(wǎng),城域網(wǎng)等。
[0084]在一些實(shí)施方式中,本發(fā)明所提供的裝置中的存儲(chǔ)器存儲(chǔ)了程序5031,程序可以被處理器執(zhí)行,這個(gè)程序包括:
[0085]接收第一請(qǐng)求,其中,所述第一請(qǐng)求包含第一區(qū)間的區(qū)間信息和鎖權(quán)限信息;
[0086]將所述第一區(qū)間與本地存儲(chǔ)的已授權(quán)區(qū)間進(jìn)行比對(duì);
[0087]若所述第一區(qū)間是所述已授權(quán)區(qū)間中第二區(qū)間的子集,則根據(jù)預(yù)設(shè)的沖突判斷規(guī)則確定所述第一區(qū)間的鎖權(quán)限信息與所述第二區(qū)間的鎖權(quán)限信息是否沖突;
[0088]如果所述第一區(qū)間的鎖權(quán)限信息與所述第二區(qū)間的鎖權(quán)限信息不沖突,則返回所述第一區(qū)間的區(qū)間信息和鎖權(quán)限信息。
[0089]本申請(qǐng)實(shí)施例中的上述一個(gè)或多個(gè)技術(shù)方案,至少具有如下的技術(shù)效果:
[0090]如圖6所示,如果用戶新申請(qǐng)的范圍鎖為[8,9]R,因?yàn)閰^(qū)間[8,9]與樹中的大部分區(qū)間都重疊,只有范圍鎖[0,2]W不與區(qū)間[8,9]重疊,所以使用現(xiàn)有技術(shù)的方案進(jìn)行遍歷時(shí),范圍鎖[8,9]R的加鎖請(qǐng)求需要遍歷6個(gè)樹節(jié)點(diǎn)才能確定無沖突(圖4所示樹中除[0,2]之外的6個(gè)節(jié)點(diǎn))。使用本發(fā)明實(shí)施例所提供的方案,則只需要與第一個(gè)節(jié)點(diǎn)[5,10]比較一次即可,節(jié)省了 5次比較操作。所以采用本發(fā)明實(shí)施例所提供的方案能夠提高范圍鎖的沖突檢測(cè)性能。
[0091]當(dāng)樹規(guī)模很大且加鎖操作非常頻繁時(shí)(如每秒上萬次加鎖),應(yīng)用本發(fā)明實(shí)施例所提供的方案能夠?qū)O大的提升范圍鎖的檢測(cè)性能。
[0092]需要說明的是,在上述實(shí)施例中,對(duì)各個(gè)實(shí)施例的描述都各有側(cè)重,某個(gè)實(shí)施例中沒有詳述的部分,可以參見其他實(shí)施例的相關(guān)描述。在本文中,諸如第一和第二等之類的關(guān)系術(shù)語僅僅用來將一個(gè)實(shí)體或者操作與另一個(gè)實(shí)體或操作區(qū)分開來,而不一定要求或者暗示這些實(shí)體或操作之間存在任何這種實(shí)際的關(guān)系或者順序。而且,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者設(shè)備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者設(shè)備所固有的要素。在沒有更多限制的情況下,由語句“包括一個(gè)……”限定的要素,并不排除在包括所述要素的過程、方法、物品或者設(shè)備中還存在另外的相同要素。
[0093]以上所述,以上實(shí)施例僅用以對(duì)本申請(qǐng)的技術(shù)方案進(jìn)行了詳細(xì)介紹,但以上實(shí)施例的說明只是用于幫助理解本發(fā)明的方法及其核心思想,不應(yīng)理解為對(duì)本發(fā)明的限制。本【技術(shù)領(lǐng)域】的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到的變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。
【權(quán)利要求】
1.一種范圍鎖的實(shí)現(xiàn)方法,其特征在于,該方法包括: 接收第一請(qǐng)求,其中,所述第一請(qǐng)求包含第一區(qū)間的區(qū)間信息和鎖權(quán)限信息; 將所述第一區(qū)間與本地存儲(chǔ)的已授權(quán)區(qū)間進(jìn)行比對(duì); 若所述第一區(qū)間是所述已授權(quán)區(qū)間中第二區(qū)間的子集,則根據(jù)預(yù)設(shè)的沖突判斷規(guī)則確定所述第一區(qū)間的鎖權(quán)限信息與所述第二區(qū)間的鎖權(quán)限信息是否沖突; 如果所述第一區(qū)間的鎖權(quán)限信息與所述第二區(qū)間的鎖權(quán)限信息不沖突,則返回所述第一區(qū)間的區(qū)間信息和鎖權(quán)限信息。
2.如權(quán)利要求1所述的方法,其特征在于,所述已授權(quán)區(qū)間的區(qū)間信息和鎖權(quán)限信息以紅黑樹的方式記錄; 所述方法還包括:將所述第一區(qū)間的區(qū)間信息和鎖權(quán)限信息加入到紅黑樹中。
3.如權(quán)利要求1或2所述的方法,其特征在于,當(dāng)所述已授權(quán)區(qū)間有多個(gè)時(shí),其中,任意兩個(gè)已授權(quán)區(qū)間存在重疊部分,則所述任意兩個(gè)已授權(quán)區(qū)間的鎖權(quán)限信息不沖突。
4.如權(quán)利要求1?3任一所述的方法,其特征在于,所述鎖權(quán)限信息包括:對(duì)數(shù)據(jù)執(zhí)行讀操作或?qū)懖僮鞯逆i權(quán)限信息。
5.如權(quán)利要求1?4任一所述的方法,其特征在于,根據(jù)預(yù)設(shè)的沖突判斷規(guī)則確定所述第一區(qū)間的鎖權(quán)限信息與所述第二區(qū)間的鎖權(quán)限信息是否沖突包括: 當(dāng)所述第一區(qū)間的鎖權(quán)限信息與所述第二區(qū)間的鎖權(quán)限信息不相同,則確定所述第一區(qū)間的鎖權(quán)限信息與所述第二區(qū)間的鎖權(quán)限信息沖突; 當(dāng)對(duì)所述第一區(qū)間的鎖權(quán)限信息與所述第二區(qū)間的鎖權(quán)限信息相同,則確定第一區(qū)間的鎖權(quán)限信息與所述第二區(qū)間的鎖權(quán)限信息是否為讀取操作,如果是,則確定所述第一區(qū)間的鎖權(quán)限信息與所述第二區(qū)間的鎖權(quán)限信息不沖突;否則,所述第一區(qū)間的鎖權(quán)限信息與所述第二區(qū)間的鎖權(quán)限信息沖突。
6.如權(quán)利要求1?5任一所述的方法,其特征在于,還包括: 若所述已授權(quán)區(qū)間中不包含所述第一區(qū)間,則返回所述第一區(qū)間的區(qū)間信息和鎖權(quán)限信息;或 若所述已授權(quán)區(qū)間與所述第一區(qū)間有重合部分,則遍歷已授權(quán)區(qū)間,確定所述第一區(qū)間的區(qū)間信息和鎖權(quán)限信息是否與所述已授權(quán)區(qū)間的區(qū)間信息和鎖權(quán)限信息沖突;如果沖突則將所述第一請(qǐng)求放入等待隊(duì)列或返回拒絕的響應(yīng)消息;如果不沖突,返回所述第一區(qū)間的區(qū)間信息和鎖權(quán)限信息。
7.—種范圍鎖的實(shí)現(xiàn)裝置,其特征在于,該裝置包括: 接收模塊,用于接收第一請(qǐng)求,其中,所述第一請(qǐng)求包含第一區(qū)間的區(qū)間信息和鎖權(quán)限信息; 比對(duì)模塊,用于將所述第一區(qū)間與本地存儲(chǔ)的已授權(quán)區(qū)間進(jìn)行比對(duì); 沖突判斷模塊,用于若所述第一區(qū)間是所述已授權(quán)區(qū)間中第二區(qū)間的子集,則根據(jù)預(yù)設(shè)的沖突判斷規(guī)則確定所述第一區(qū)間的鎖權(quán)限信息與所述第二區(qū)間的鎖權(quán)限信息是否沖關(guān); 授權(quán)模塊,用于如果所述第一區(qū)間的鎖權(quán)限信息與所述第二區(qū)間的鎖權(quán)限信息不沖突,則返回所述第一區(qū)間的區(qū)間信息和鎖權(quán)限信息。
8.如權(quán)利要求7所述的裝置,其特征在于,該裝置還包括存儲(chǔ)模塊,用于以紅黑樹的方式記錄所述已授權(quán)區(qū)間的區(qū)間信息和鎖權(quán)限信息,并將所述第一區(qū)間的區(qū)間信息和鎖權(quán)限信息加入到紅黑樹中。
9.如權(quán)利要求7或8所述的裝置,其特征在于,沖突判斷模塊具體用于當(dāng)所述第一區(qū)間的鎖權(quán)限信息與所述第二區(qū)間的鎖權(quán)限信息不相同,則確定所述第一區(qū)間的鎖權(quán)限信息與所述第二區(qū)間的鎖權(quán)限信息沖突;當(dāng)對(duì)所述第一區(qū)間的鎖權(quán)限信息與所述第二區(qū)間的鎖權(quán)限信息相同,則確定第一區(qū)間的鎖權(quán)限信息與所述第二區(qū)間的鎖權(quán)限信息是否為讀取操作,如果是,則確定所述第一區(qū)間的鎖權(quán)限信息與所述第二區(qū)間的鎖權(quán)限信息不沖突;否則,所述第一區(qū)間的鎖權(quán)限信息與所述第二區(qū)間的鎖權(quán)限信息沖突。
10.如權(quán)利要求7?9任一所述的裝置,其特征在于,該裝置還包括: 遍歷模塊,用于遍歷已授權(quán)的區(qū)間,若所述已授權(quán)區(qū)間中不包含所述第一區(qū)間,則返回所述第一區(qū)間的區(qū)間信息和鎖權(quán)限信息;若所述已授權(quán)區(qū)間與所述第一區(qū)間有重合部分,則遍歷已授權(quán)區(qū)間,確定所述第一區(qū)間的區(qū)間信息和鎖權(quán)限信息是否與所述已授權(quán)區(qū)間的區(qū)間信息和鎖權(quán)限信息沖突;如果沖突則將所述第一請(qǐng)求放入等待隊(duì)列或返回拒絕的響應(yīng)消息;如果不沖突,返回所述第一區(qū)間的區(qū)間信息和鎖權(quán)限信息。
【文檔編號(hào)】G06F17/30GK104391935SQ201410677262
【公開日】2015年3月4日 申請(qǐng)日期:2014年11月21日 優(yōu)先權(quán)日:2014年11月21日
【發(fā)明者】楊晗, 馮銳 申請(qǐng)人:華為技術(shù)有限公司