專利名稱:事件模型中的快速事件匹配方法
技術(shù)領(lǐng)域:
本發(fā)明涉及分布式虛擬環(huán)境中的通訊問(wèn)題,特別涉及事件模型中的快速事件匹配方法,涉及具有異步性、動(dòng)態(tài)性、多對(duì)多和匿名等特點(diǎn)事件模型的通訊方式。
背景技術(shù):
分布式虛擬環(huán)境(DVE)技術(shù)已經(jīng)成為目前計(jì)算機(jī)領(lǐng)域的一個(gè)熱門的學(xué)科,在軍事、醫(yī)學(xué)、建筑、教育及娛樂(lè)等眾多領(lǐng)域中都得到了成功的應(yīng)用[1]Singh G,Serra L.Brick NetA Software Toolkit for Network Based Virtual Worlds(分布式虛擬環(huán)境的軟件工具包),Presence,1994,3(1)pp.19-34。
事件模型(Event Model)是獨(dú)立于應(yīng)用的用于提供基于事件通訊的結(jié)構(gòu),事件(Event)[2]M.Haahr,R.Meier.P.Nixon,V.Cahill and E.Jul,F(xiàn)iltering and Scalabilityin the ECO Distributed Event Model(ECO分布式事件模型的過(guò)濾和穩(wěn)定性),In 5thInternational Symposium on Software Engineering for Parallel and DistributedSystems,2000。就是這種通信模型中的基本通信機(jī)制。作為一種新型的通信模型,事件模型在分布式系統(tǒng)通訊中的作用日益明顯,其特點(diǎn)和意義在于它提供了一種松耦合的通訊模式。這種通訊模式有異步通信、動(dòng)態(tài)性、多對(duì)多通信方式和可匿名的特點(diǎn),這些特點(diǎn)使其能夠適應(yīng)大規(guī)模分布式系統(tǒng)的需要,同時(shí)使得分布式虛擬環(huán)境的通訊模塊和仿真模塊可以分別獨(dú)立進(jìn)行設(shè)計(jì)開(kāi)發(fā),減少了設(shè)計(jì)開(kāi)發(fā)的復(fù)雜性。
事件匹配是事件模型設(shè)計(jì)中非常重要的一個(gè)環(huán)節(jié),是決定事件模型的事件傳遞的效率和準(zhǔn)確性的關(guān)鍵。
在分布式虛擬環(huán)境的事件模型中,最受關(guān)注的是基于內(nèi)容的對(duì)稱發(fā)布/定購(gòu)模型中的事件匹配。在這種模型中,事件的發(fā)布區(qū)域需要與每個(gè)訂購(gòu)區(qū)域進(jìn)行匹配,而每個(gè)發(fā)布區(qū)域和訂購(gòu)區(qū)域又是由多個(gè)謂詞組成,所以實(shí)際上是通過(guò)謂詞之間的匹配來(lái)實(shí)現(xiàn)發(fā)布區(qū)域與訂購(gòu)區(qū)域的匹配。
當(dāng)一個(gè)系統(tǒng)要處理大量的訂購(gòu)和事件時(shí),事件匹配需要面對(duì)成千上萬(wàn)的謂詞,所以,能否快速的進(jìn)行事件匹配決定了系統(tǒng)的實(shí)時(shí)性能否得到滿足,同時(shí)事件匹配是否準(zhǔn)確也將影響整個(gè)事件傳遞的準(zhǔn)確性,而一個(gè)低效率低準(zhǔn)確率的事件匹配算法很大程度上會(huì)給系統(tǒng)帶來(lái)?yè)砣推款i。
因此,研究一種快速準(zhǔn)確的事件匹配算法不僅在相關(guān)研究領(lǐng)域具有深遠(yuǎn)的意義,同時(shí)也在很大程度上是分布式虛擬環(huán)境在商業(yè)領(lǐng)域能否成功的應(yīng)用的關(guān)鍵?,F(xiàn)有主要的事件匹配算法研究都是在減少額外的謂詞匹配測(cè)試方面進(jìn)行優(yōu)化處理,主要的算法一般分為兩類[3]Walid Rjaibi,Klaus Dittrich and Dieter Jaepel.Event matching in symmetric subscription systems(對(duì)稱訂購(gòu)系統(tǒng)中的事件匹配),In CASCON Conference,2002基于謂詞索引算法(Predicate Indexing Based)和基于匹配網(wǎng)絡(luò)算法(Testing Network Based)。
基于謂詞索引算法的事件匹配算法主要以訂購(gòu)中的謂詞組織成的索引結(jié)構(gòu)為基礎(chǔ),此類算法一般由兩個(gè)階段組成,第一階段進(jìn)行謂詞匹配測(cè)試,第二階段再使用第一階段的測(cè)試結(jié)果進(jìn)行訂購(gòu)匹配測(cè)試。代表算法有計(jì)數(shù)算法(CountingAlgorithm)[4]T.W.Yan and H.Garc’ya-Molina.Index Structures for SelectiveDissemination of Information Under the Boolean Model(在布爾模型下信息選擇性分發(fā)的索引結(jié)構(gòu)).ACM Trans.Database Syst.,1994,19(2)pp.332-334;漢森算法(Hanson Algorithm)[5]E.Hanson,M.Chaabouni,C.Kim and Y.Wang.A PredicateMatching Algorithm for Database Rule Systems(一種數(shù)據(jù)庫(kù)規(guī)則系統(tǒng)中的謂詞匹配算法),In SIGMOD’90,1990等。
基于匹配網(wǎng)絡(luò)的算法的主要思想是在預(yù)處理階段把訂購(gòu)組成一個(gè)圖或者匹配網(wǎng)絡(luò)的結(jié)構(gòu),事件從圖的入口進(jìn)入,通過(guò)各個(gè)中間節(jié)點(diǎn)進(jìn)行過(guò)濾,直到出口判定匹配結(jié)果。代表算法有基于匹配樹(Testing Tree Based)的算法[6]M.Aguilera,R.Strom,D.Sturman,M.Astley and T.Chandra.Matching Events in A Content-basedSubscription System(基于內(nèi)容的訂購(gòu)系統(tǒng)中的事件匹配),In Eighteen ACMSymposium on Principles of Distributed Computing(PODC’99),1999和基于二叉決策圖(Binary Decisions Diagrams,BDDs)的算法[7]A.Campailla,S.Chaki,E.Clarke,S.Jha ahd H.Veith.Efficient Filtering in Publish-Subscribe Systems Using BinaryDecision Diagrams(發(fā)布/訂購(gòu)系統(tǒng)中使用二叉決策圖的高效過(guò)濾),In Proceedingsof the 23th International Conference on Software Engineering,Toronto,Canada,May2001,pp.443-452。
現(xiàn)有的兩類匹配算法都有各自的不足如基于謂詞索引的算法無(wú)法利用不同屬性間的相關(guān)性輔助進(jìn)行匹配,從而提高匹配效率;而基于決策網(wǎng)絡(luò)的事件匹配算法需要靜態(tài)的構(gòu)建匹配樹或者二叉決策圖,不適應(yīng)動(dòng)態(tài)事件匹配的需要,難以進(jìn)行動(dòng)態(tài)更新,一般只適用于靜態(tài)的事件模型。而在分布式虛擬環(huán)境中,事件和訂購(gòu)都是動(dòng)態(tài)的,不僅事件需要實(shí)時(shí)高速的發(fā)送,訂購(gòu)也需要根據(jù)用戶狀態(tài)的改變而不斷更新。此外,目前算法只能適應(yīng)非對(duì)稱的事件匹配,不能解決分布式虛擬環(huán)境中對(duì)稱事件匹配的問(wèn)題。
發(fā)明內(nèi)容
本發(fā)明的目的是針對(duì)分布式虛擬環(huán)境中,需要?jiǎng)討B(tài)對(duì)稱事件匹配支持的要求,在現(xiàn)有的兩類算法基礎(chǔ)上,提出一種改進(jìn)的快速事件匹配算法,此算法能綜合了兩類算法各自的優(yōu)點(diǎn),不僅提高了匹配的速度和效率,還解決了對(duì)稱事件匹配的問(wèn)題。
假設(shè)訂購(gòu)表達(dá)式由多個(gè)謂詞組成,而事件仍然是由屬性對(duì)組成。
本發(fā)明的重點(diǎn)是數(shù)據(jù)結(jié)構(gòu)部分,這也是本發(fā)明的算法優(yōu)化的關(guān)鍵。主要數(shù)據(jù)結(jié)構(gòu)如附圖1所示,是由一張謂詞表(Predicate Table)、一個(gè)匹配桶(MatchBucket)、訂購(gòu)列表(Subscription List)和接口列表(Interface List)組成。
謂詞表(Predict Table)本發(fā)明中,謂詞表是數(shù)據(jù)結(jié)構(gòu)的核心部分,謂詞表的組織結(jié)合了謂詞索引算法和匹配網(wǎng)絡(luò)算法各自數(shù)據(jù)結(jié)構(gòu)的特點(diǎn)。所有的謂詞分類成為謂詞族,具有相同屬性和相同操作符的謂詞歸入一個(gè)謂詞族。所有謂詞族分成等值謂詞、上域值謂詞和下域值謂詞三類。每個(gè)謂詞族對(duì)應(yīng)謂詞表的一行,且按序排列“attribute<”謂詞族(如附圖2),謂詞比值從大到小排列,反之,“attribute>”謂詞族,謂詞比值從小到大排序,對(duì)于等值謂詞族則無(wú)論何種順序都可以。此外,謂詞表中將訂購(gòu)中的謂詞用指針鏈接起來(lái),最后都指向訂購(gòu)列表的具體訂購(gòu)。
匹配桶(Match Bucket)用于輔助謂詞表進(jìn)行匹配。對(duì)謂詞表的匹配是逐行進(jìn)行的,但不是所有的訂購(gòu)都對(duì)所有的謂詞族進(jìn)行訂購(gòu),有的指針可能會(huì)跨越某些行,為了使得這樣的謂詞在逐行掃描中不會(huì)丟失,采用匹配桶的數(shù)據(jù)結(jié)構(gòu),用于暫時(shí)存儲(chǔ)這些被延緩的謂詞的索引。
接口列表(Interface List)和訂購(gòu)列表(Subscription List)接口列表和訂購(gòu)列表維護(hù)了接口和接口對(duì)應(yīng)的訂購(gòu)信息。訂購(gòu)列表登記了所有加入到謂詞表的訂購(gòu)的一個(gè)記錄,同時(shí)有一個(gè)指向謂詞表中訂購(gòu)的第一個(gè)謂詞的指針,便于訪問(wèn)整個(gè)訂購(gòu)的所有謂詞。接口代表了事件的傳送方向,是事件匹配的最終目的。每個(gè)接口可能有多條訂購(gòu)信息,所以用接口列表和訂購(gòu)列表將所有的訂購(gòu)組織在一起。
事件模型中的快速事件匹配方法步驟如下,分為事件訂購(gòu)和事件匹配兩大部分事件訂購(gòu)在事件匹配算法的數(shù)據(jù)結(jié)構(gòu)上的事件訂購(gòu)處理就是事件匹配的預(yù)處理過(guò)程,當(dāng)事件服務(wù)接收到新的事件訂購(gòu)后,需要更新謂詞表、接口列表和訂購(gòu)列表;首先,將訂購(gòu)加入到訂購(gòu)列表中,將相應(yīng)接口的最后一個(gè)訂購(gòu)在訂購(gòu)列表中的最后一個(gè)條目的后續(xù)指向新加入的訂購(gòu),并將接口列表中對(duì)應(yīng)接口的訂購(gòu)數(shù)加1;如果訂購(gòu)數(shù)超過(guò)了限值,在這個(gè)接口的所有訂購(gòu)中選取兩個(gè)訂購(gòu)進(jìn)行聚集,選擇的標(biāo)準(zhǔn)是兩個(gè)訂購(gòu)的重疊部分最大;然后,在謂詞表中登記訂購(gòu)條目。訂購(gòu)的信息按照謂詞表從上往下的順序,在訂購(gòu)所包含的每個(gè)謂詞族中通過(guò)二分查找,找到插入位置,把對(duì)應(yīng)的訂購(gòu)值插入表中;在謂詞表插入的過(guò)程中,將插入的謂詞按從上至下的順序逐一鏈接,最后指向訂購(gòu)列表中的對(duì)應(yīng)位置,并向訂購(gòu)列表中對(duì)應(yīng)表項(xiàng)傳遞訂購(gòu)在謂詞表中第一個(gè)位置的指針。
事件匹配在數(shù)據(jù)結(jié)構(gòu)和事件訂購(gòu)的預(yù)處理的基礎(chǔ)上,只需將接收到的事件在謂詞表中逐行進(jìn)行匹配測(cè)試,設(shè)Pi為第i行謂詞族的所有謂詞的集合,Pi_match表示Pi中匹配該事件的謂詞集合,Smatch表示匹配的訂購(gòu)集合;算法首先對(duì)匹配桶內(nèi)容進(jìn)行初始化。遍歷訂購(gòu)列表,找到每個(gè)訂購(gòu)的第一個(gè)謂詞的位置,初始化后,匹配桶中保存了所有訂購(gòu)的第一個(gè)謂詞的索引;采用對(duì)謂詞表的匹配逐行進(jìn)行的匹配桶的數(shù)據(jù)結(jié)構(gòu),用于暫時(shí)存儲(chǔ)這些被延緩的謂詞的索引。
然后需要對(duì)謂詞表進(jìn)行逐行掃描。對(duì)于謂詞表的每一行,主要進(jìn)行兩部分工作找到這個(gè)謂詞族中匹配該事件的所有謂詞,然后根據(jù)匹配桶的內(nèi)容對(duì)這些匹配的謂詞逐個(gè)進(jìn)行考察;將謂詞表中的所有謂詞分成匹配和不匹配兩部分,在對(duì)第i行進(jìn)行測(cè)試時(shí),對(duì)于非等值謂詞族,由于謂詞都經(jīng)過(guò)排序,所以可以使用二分查找法,根據(jù)事件中對(duì)應(yīng)的屬性值,找到一個(gè)位置將Pi分成Pi_left和Pi_right兩部分,Pi_left就對(duì)應(yīng)這一行的Pi_match,表示該行的謂詞中匹配該事件的集合;對(duì)于等值謂詞族,則查找所有謂詞值等于事件對(duì)應(yīng)的屬性值的謂詞,放入Pi_match;如果該事件不包含此行對(duì)應(yīng)的屬性,則認(rèn)為這一行所有的謂詞都是匹配的,Pi_match包含該行的所有謂詞;在逐行測(cè)試中,設(shè)在對(duì)第i行進(jìn)行測(cè)試時(shí),匹配桶中第i行對(duì)應(yīng)的謂詞集合為Bi,則該行中所有真正滿足匹配測(cè)試的謂詞集合為Pi_match∩Bi;將這個(gè)集合中是訂購(gòu)最后一個(gè)節(jié)點(diǎn)的謂詞對(duì)應(yīng)的訂購(gòu)加入Smatch,其余的則將其后繼謂詞索引填入匹配桶中對(duì)應(yīng)位置。對(duì)Pi_match和Bi的求交運(yùn)算,只需要把Bi中每個(gè)謂詞索引與這一行將謂詞表Pi分為Pi_left和Pi_right兩部分的分割位置進(jìn)行比較,在這個(gè)位置之前就表示這個(gè)謂詞屬于這個(gè)求交結(jié)果,否則被剔除。
本發(fā)明的特點(diǎn)是此算法綜合了兩類算法各自的優(yōu)點(diǎn),不僅提高了匹配的速度和效率,還解決了對(duì)稱事件匹配的問(wèn)題。
圖1是本發(fā)明的主要數(shù)據(jù)結(jié)構(gòu),是由一張謂詞表(Predicate Table)、一個(gè)匹配桶(Match Bucket)、訂購(gòu)列表(Subscription List)和接口列表(Interface List)組成。
圖2是本發(fā)明謂詞表中的一行(“X<”謂詞族)每個(gè)謂詞族對(duì)應(yīng)謂詞表的一行,且按序排列。
圖3是本發(fā)明算法的偽代碼具體實(shí)施方法本發(fā)明具體方法(算法)步驟如下,主要分為事件訂購(gòu)和事件匹配兩大部分事件訂購(gòu)雖然本發(fā)明地設(shè)計(jì)目標(biāo)是快速事件匹配算法,但是事件訂購(gòu)也影響了事件匹配所依賴的數(shù)據(jù)結(jié)構(gòu)。在事件匹配算法的數(shù)據(jù)結(jié)構(gòu)上的事件訂購(gòu)處理就是事件匹配的預(yù)處理過(guò)程。當(dāng)事件服務(wù)接收到新的事件訂購(gòu)后,需要更新謂詞表、接口列表和訂購(gòu)列表。首先,將訂購(gòu)加入到訂購(gòu)列表中,將相應(yīng)接口的最后一個(gè)訂購(gòu)在訂購(gòu)列表中的最后一個(gè)條目的后續(xù)指向新加入的訂購(gòu),并將接口列表中對(duì)應(yīng)接口的訂購(gòu)數(shù)加1。如果訂購(gòu)數(shù)超過(guò)了限值,在這個(gè)接口的所有訂購(gòu)中選取兩個(gè)訂購(gòu)進(jìn)行聚集,選擇的標(biāo)準(zhǔn)是兩個(gè)訂購(gòu)的重疊部分最大。然后,在謂詞表中登記訂購(gòu)條目。訂購(gòu)的信息按照謂詞表從上往下的順序,在訂購(gòu)所包含的每個(gè)謂詞族中通過(guò)二分查找,找到插入位置,把對(duì)應(yīng)的訂購(gòu)值插入表中。在謂詞表插入的過(guò)程中,將插入的謂詞按從上至下的順序逐一鏈接,最后指向訂購(gòu)列表中的對(duì)應(yīng)位置,并向訂購(gòu)列表中對(duì)應(yīng)表項(xiàng)傳遞訂購(gòu)在謂詞表中第一個(gè)位置的指針。
用戶也可以向事件服務(wù)發(fā)送更新已有訂購(gòu)的請(qǐng)求。在分布式虛擬環(huán)境中,需要不斷地更新訂購(gòu)。更新訂購(gòu)的處理步驟與加入新訂購(gòu)類似。在謂詞表中,將對(duì)應(yīng)訂購(gòu)的謂詞逐個(gè)替換,并重新排序插入。
事件匹配在數(shù)據(jù)結(jié)構(gòu)和事件訂購(gòu)的預(yù)處理的基礎(chǔ)上,只需將接收到的事件在謂詞表中逐行進(jìn)行匹配測(cè)試。
設(shè)Pi為第i行謂詞族的所有謂詞的集合,Pi_match表示Pi中匹配該事件的謂詞集合。Smatch表示匹配的訂購(gòu)集合。
算法首先對(duì)匹配桶內(nèi)容進(jìn)行初始化。遍歷訂購(gòu)列表,找到每個(gè)訂購(gòu)的第一個(gè)謂詞的位置。如果一個(gè)訂購(gòu)的第一個(gè)謂詞在謂詞表中第i行的第i列的位置,那么在匹配桶的第i行中加入這個(gè)位置索引j。初始化后,匹配桶中保存了所有訂購(gòu)的第一個(gè)謂詞的索引。
然后需要對(duì)謂詞表進(jìn)行逐行掃描。對(duì)于謂詞表的每一行,主要進(jìn)行兩部分工作找到這個(gè)謂詞族中匹配該事件的所有謂詞,然后根據(jù)匹配桶的內(nèi)容對(duì)這些匹配的謂詞逐個(gè)進(jìn)行考察。
找到謂詞族中匹配事件的所有謂詞就是將謂詞表中的所有謂詞分成匹配和不匹配兩部分。在對(duì)第i行進(jìn)行測(cè)試時(shí),對(duì)于非等值謂詞族,由于謂詞都經(jīng)過(guò)排序,所以可以使用二分查找法,根據(jù)事件中對(duì)應(yīng)的屬性值,找到一個(gè)位置將Pi分成Pi_left和Pi_right兩部分,Pi_left就對(duì)應(yīng)這一行的Pi_match,表示該行的謂詞中匹配該事件的集合。對(duì)于等值謂詞族,則查找所有謂詞值等于事件對(duì)應(yīng)的屬性值的謂詞,放入Pi_match。如果該事件不包含此行對(duì)應(yīng)的屬性,則認(rèn)為這一行所有的謂詞都是匹配的,Pi_match包含該行的所有謂詞。
在逐行測(cè)試中,設(shè)在對(duì)第i行進(jìn)行測(cè)試時(shí),匹配桶中第i行對(duì)應(yīng)的謂詞集合為Bi,則該行中所有真正滿足匹配測(cè)試的謂詞集合為Pi_match∩Bi。將這個(gè)集合中是訂購(gòu)最后一個(gè)節(jié)點(diǎn)的謂詞對(duì)應(yīng)的訂購(gòu)加入Smatch,其余的則將其后繼謂詞索引填入匹配桶中對(duì)應(yīng)位置。對(duì)Pi_match和Bi的求交運(yùn)算,只需要把Bi中每個(gè)謂詞索引與這一行將謂詞表Pi分為Pi_left和Pi_right兩部分的分割位置進(jìn)行比較,在這個(gè)位置之前就表示這個(gè)謂詞屬于這個(gè)求交結(jié)果,否則被剔除。
對(duì)稱事件的匹配本發(fā)明還能解決其它算法無(wú)法兼顧的對(duì)稱事件的匹配問(wèn)題。對(duì)稱的事件匹配不僅需要能處理訂購(gòu)區(qū)域與發(fā)布值的正向匹配,還需要能處理發(fā)布區(qū)域與訂購(gòu)值的逆向匹配以及發(fā)布區(qū)域與訂購(gòu)區(qū)域的對(duì)稱匹配。
對(duì)稱事件匹配要處理的發(fā)布區(qū)域和訂購(gòu)區(qū)域都是由多個(gè)謂詞組成的,實(shí)際上對(duì)稱事件匹配的問(wèn)題就可以分解為謂詞與謂詞之間的匹配。在本發(fā)明中,謂詞已經(jīng)根據(jù)各自限定的操作符分成三類。
對(duì)于等值謂詞,不管正向、逆向還是對(duì)稱的事件匹配處理都是相同的,只要屬性值相等就匹配,不相等就不匹配。
上域值和下域值謂詞的事件匹配則有所不同,上域值和下域值謂詞一般是成對(duì)出現(xiàn),一起確定一個(gè)屬性的范圍,因此在謂詞匹配時(shí)需要謂詞所包含的屬性成對(duì)的匹配,這往往采用交叉的謂詞匹配方法,如對(duì)于某屬性謂詞A,訂購(gòu)區(qū)域A∈(a,b),發(fā)布區(qū)域A∈(c,d),很明顯,只有當(dāng)c<b或者d<a的情況下才不匹配,其他情況下兩個(gè)屬性范圍都有重疊,所以需要將訂購(gòu)的上域值謂詞與發(fā)布的下域值謂詞比較,訂購(gòu)的下域值謂詞則與發(fā)布的上域值謂詞比較。
交叉的謂詞匹配在上述介紹的謂詞表的算法結(jié)構(gòu)上很容易實(shí)現(xiàn),算法仍然適用。對(duì)稱的算法仍然在謂詞表中逐行掃描,對(duì)于等值謂詞族還是一樣。在測(cè)試上域值謂詞族時(shí),選取發(fā)布區(qū)域中的下域值謂詞的屬性值進(jìn)行測(cè)試,仍然像非對(duì)成事件匹配一樣進(jìn)行二分查找,把一行中的謂詞分成左右兩部分,左半部的謂詞部分是匹配的。對(duì)于下域值謂詞族的測(cè)試,則取發(fā)布區(qū)域中相應(yīng)的上域值謂詞匹配,還是將謂詞行分割后取左半部。
所以,對(duì)謂詞表的掃描過(guò)程和上述的算法基本相同,改變的只是選取的測(cè)試對(duì)象,算法本身不需要改變,這就實(shí)現(xiàn)了對(duì)稱事件的匹配。
在這樣的對(duì)稱的事件匹配算法中,如果要進(jìn)行正向或者逆向的事件匹配,只需要把一方的訂購(gòu)區(qū)域中的相關(guān)屬性的上域值謂詞和下域值謂詞取相同的值,其他處理仍然一樣。
本發(fā)明提出的方法,以及據(jù)此設(shè)計(jì)實(shí)現(xiàn)的分布式虛擬環(huán)境中的事件模型系統(tǒng)有如下的優(yōu)點(diǎn)匹配速度快本發(fā)明的算法利用了謂詞間的關(guān)聯(lián)性和屬性間的相關(guān)性,加快了匹配速度,使得基于謂詞索引算法和基于匹配網(wǎng)絡(luò)算法各自的優(yōu)點(diǎn)都能在本發(fā)明中得到體現(xiàn)。
動(dòng)態(tài)性本發(fā)明的算法不需要像現(xiàn)有的如基于匹配網(wǎng)絡(luò)的算法一樣靜態(tài)的構(gòu)造匹配網(wǎng)絡(luò),克服了這類算法的缺點(diǎn),可以動(dòng)態(tài)的更新訂購(gòu)信息。
高效率與基于謂詞索引的算法相比,該算法也對(duì)謂詞族進(jìn)行了劃分,并對(duì)每個(gè)謂詞族用排序或者散列表的方式進(jìn)行了索引,這使得在對(duì)每個(gè)謂詞進(jìn)行匹配時(shí)能獲得很高的效率。
復(fù)雜度降低本發(fā)明的算法的空間復(fù)雜度按照訂購(gòu)數(shù)量線性增長(zhǎng);其預(yù)處理過(guò)程即事件訂購(gòu)的時(shí)間復(fù)雜度比現(xiàn)有的基于匹配網(wǎng)絡(luò)的事件匹配算法大大降低,匹配過(guò)程的時(shí)間復(fù)雜度與其他事件匹配算法的時(shí)間復(fù)雜度相當(dāng),因此,算法的總體時(shí)間復(fù)雜度會(huì)大幅度降低。
實(shí)現(xiàn)對(duì)稱事件的匹配本發(fā)明的算法不僅能高效準(zhǔn)確的進(jìn)行非對(duì)稱事件的匹配,同時(shí)還適用于對(duì)稱事件的匹配,這是現(xiàn)有其它算法所無(wú)法做到的。
當(dāng)前,隨著Internet的廣泛使用,分布式虛擬環(huán)境及其相關(guān)的一系列應(yīng)用都迫切的需要一種快速高效的事件匹配技術(shù),而本發(fā)明的算法可以說(shuō)正適應(yīng)了這種需求,可以預(yù)見(jiàn)有著良好的市場(chǎng)前景。
算法的偽代碼如圖3所示。
實(shí)施例應(yīng)用于網(wǎng)絡(luò)的分布式事件模型中在基于CBT(Core-Based Tree)組播樹及主動(dòng)路由思想的分布式環(huán)境中,所有主機(jī)都通過(guò)主動(dòng)路由器(Active Router)連接到組播樹上,同時(shí)使用發(fā)布/訂購(gòu)的事件模型來(lái)進(jìn)行通訊。其中的發(fā)布消息、訂購(gòu)消息或發(fā)布區(qū)域、訂購(gòu)區(qū)域都用多個(gè)屬性的值或者值域組成的結(jié)構(gòu)表示,稱為一個(gè)興趣表達(dá)式。
在第一階段,主動(dòng)路由器在接收到連接其的各主機(jī)或下游路由器發(fā)送的訂購(gòu)消息后,在維護(hù)虛擬接口狀態(tài)的同時(shí),創(chuàng)建和維護(hù)所有訂購(gòu)區(qū)域(興趣表達(dá)式)構(gòu)成的路由空間(Routing Space)。這個(gè)路由空間如前所述,被構(gòu)造成多個(gè)鏈表的結(jié)構(gòu)(謂詞表,訂購(gòu)列表及接口列表),根據(jù)興趣表達(dá)式中的屬性的數(shù)目和關(guān)系來(lái)確定鏈表的結(jié)構(gòu)。
此后,發(fā)布/訂購(gòu)消息不斷在組播樹上傳播,主動(dòng)路由器根據(jù)新的訂購(gòu)消息或者訂購(gòu)更新消息不停的維護(hù)路由空間的同時(shí),需要處理接收到的發(fā)布數(shù)據(jù),根據(jù)發(fā)布數(shù)據(jù)中的興趣表達(dá)式來(lái)進(jìn)行相應(yīng)的匹配。
在實(shí)施具體匹配時(shí),根據(jù)本發(fā)明的快速事件匹配方法首先將發(fā)布消息中的興趣表達(dá)式中的每個(gè)屬性值域或值與對(duì)應(yīng)路由空間中的鏈表或數(shù)組元素進(jìn)行比較。由于鏈表是排過(guò)序的,因此從小到大的遍歷鏈表就可以找到發(fā)布的屬性值域在鏈表中對(duì)應(yīng)的位置,也就可以知道是否和某個(gè)虛擬接口的訂購(gòu)區(qū)域存在交集。
此時(shí),進(jìn)行判斷如果是對(duì)第一個(gè)屬性值域進(jìn)行查找過(guò)程,那么把存在交集的興趣表達(dá)式收集起來(lái)放入一個(gè)集合中,對(duì)后繼屬性的匹配過(guò)程將從這個(gè)結(jié)果集合中剔除不匹配的表達(dá)式。由于要求發(fā)布數(shù)據(jù)中的所有屬性都要求同時(shí)滿足路由空間中的某個(gè)興趣表達(dá)式,因此上述做法是合理的,只要有一個(gè)條件不滿足,就可以剔除不必要的表達(dá)式。對(duì)謂詞表的掃描結(jié)束,即完成匹配后,集合中剩下的表達(dá)式就是匹配的結(jié)果。
匹配完成后,成功匹配的發(fā)布消息根據(jù)訂購(gòu)鏈表和接口鏈表中的內(nèi)容可以找到對(duì)應(yīng)的訂購(gòu)所在的虛擬接口,并由虛擬接口向?qū)?yīng)的主動(dòng)路由器或主機(jī)轉(zhuǎn)發(fā)這個(gè)發(fā)布的數(shù)據(jù)。
上述過(guò)程不斷重復(fù),承擔(dān)整個(gè)分布式環(huán)境中的通訊的進(jìn)行。
本發(fā)明是提供該方法的實(shí)現(xiàn)思想和計(jì)算機(jī)程序,不需要特別的生產(chǎn)條件、一旦研究成功成本幾乎可忽略不計(jì)。
權(quán)利要求
1.事件模型中的快速事件匹配方法,其特征是分為事件訂購(gòu)和事件匹配兩大部分;事件訂購(gòu)在事件匹配算法的數(shù)據(jù)結(jié)構(gòu)上的事件訂購(gòu)處理就是事件匹配的預(yù)處理過(guò)程,當(dāng)事件服務(wù)接收到新的事件訂購(gòu)后,需要更新謂詞表、接口列表和訂購(gòu)列表;首先,將訂購(gòu)加入到訂購(gòu)列表中,將相應(yīng)接口的最后一個(gè)訂購(gòu)在訂購(gòu)列表中的最后一個(gè)條目的后續(xù)指向新加入的訂購(gòu),并將接口列表中對(duì)應(yīng)接口的訂購(gòu)數(shù)加1;如果訂購(gòu)數(shù)超過(guò)了限值,在這個(gè)接口的所有訂購(gòu)中選取兩個(gè)訂購(gòu)進(jìn)行聚集,選擇的標(biāo)準(zhǔn)是兩個(gè)訂購(gòu)的重疊部分最大;然后,在謂詞表中登記訂購(gòu)條目。訂購(gòu)的信息按照謂詞表從上往下的順序,在訂購(gòu)所包含的每個(gè)謂詞族中通過(guò)二分查找,找到插入位置,把對(duì)應(yīng)的訂購(gòu)值插入表中;在謂詞表插入的過(guò)程中,將插入的謂詞按從上至下的順序逐一鏈接,最后指向訂購(gòu)列表中的對(duì)應(yīng)位置,并向訂購(gòu)列表中對(duì)應(yīng)表項(xiàng)傳遞訂購(gòu)在謂詞表中第一個(gè)位置的指針;事件匹配在數(shù)據(jù)結(jié)構(gòu)和事件訂購(gòu)的預(yù)處理的基礎(chǔ)上,只需將接收到的事件在謂詞表中逐行進(jìn)行匹配測(cè)試,設(shè)Pi為第i行謂詞族的所有謂詞的集合,Pi_match表示Pi中匹配該事件的謂詞集合,Smatch表示匹配的訂購(gòu)集合;算法首先對(duì)匹配桶內(nèi)容進(jìn)行初始化。遍歷訂購(gòu)列表,找到每個(gè)訂購(gòu)的第一個(gè)謂詞的位置,初始化后,匹配桶中保存了所有訂購(gòu)的第一個(gè)謂詞的索引;采用對(duì)謂詞表的匹配逐行進(jìn)行的匹配桶的數(shù)據(jù)結(jié)構(gòu),用于暫時(shí)存儲(chǔ)這些被延緩的謂詞的索引。然后需要對(duì)謂詞表進(jìn)行逐行掃描,對(duì)于謂詞表的每一行,主要進(jìn)行兩部分工作找到這個(gè)謂詞族中匹配該事件的所有謂詞,然后根據(jù)匹配桶的內(nèi)容對(duì)這些匹配的謂詞逐個(gè)進(jìn)行考察;將謂詞表中的所有謂詞分成匹配和不匹配兩部分;在對(duì)第i行進(jìn)行測(cè)試時(shí),對(duì)于非等值謂詞族,由于謂詞都經(jīng)過(guò)排序,所以可以使用二分查找法,根據(jù)事件中對(duì)應(yīng)的屬性值,找到一個(gè)位置將Pi分成Pi_left和Pi_right兩部分,Pi_left就對(duì)應(yīng)這一行的Pi_match,表示該行的謂詞中匹配該事件的集合;對(duì)于等值謂詞族,則查找所有謂詞值等于事件對(duì)應(yīng)的屬性值的謂詞,放入Pi_match;如果該事件不包含此行對(duì)應(yīng)的屬性,則認(rèn)為這一行所有的謂詞都是匹配的,Pi_match包含該行的所有謂詞;在逐行測(cè)試中,設(shè)在對(duì)第i行進(jìn)行測(cè)試時(shí),匹配桶中第i行對(duì)應(yīng)的謂詞集合為Bi,則該行中所有真正滿足匹配測(cè)試的謂詞集合為Pi_match∩Bi;將這個(gè)集合中是訂購(gòu)最后一個(gè)節(jié)點(diǎn)的謂詞對(duì)應(yīng)的訂購(gòu)加入Smatch,其余的則將其后繼謂詞索引填入匹配桶中對(duì)應(yīng)位置。對(duì)Pi_match和Bi的求交運(yùn)算,只需要把Bi中每個(gè)謂詞索引與這一行將謂詞表Pi分為Pi_left和Pi_right兩部分的分割位置進(jìn)行比較,在這個(gè)位置之前就表示這個(gè)謂詞屬于這個(gè)求交結(jié)果,否則被剔除。
2.由權(quán)利要求1所述的事件模型中的快速事件匹配方法,其特征是對(duì)稱事件的匹配的方法是處理訂購(gòu)區(qū)域與發(fā)布值的正向匹配,還處理發(fā)布區(qū)域與訂購(gòu)值的逆向匹配以及發(fā)布區(qū)域與訂購(gòu)區(qū)域的對(duì)稱匹配;對(duì)稱事件匹配要處理的發(fā)布區(qū)域和訂購(gòu)區(qū)域都是由多個(gè)謂詞組成的,謂詞根據(jù)各自限定的操作符分成三類;對(duì)于等值謂詞,不管正向、逆向還是對(duì)稱的事件匹配處理都是相同的,只要屬性值相等就匹配,不相等就不匹配;屬性成對(duì)的匹配采用交叉的謂詞匹配方法,將訂購(gòu)的上域值謂詞與發(fā)布的下域值謂詞比較,訂購(gòu)的下域值謂詞則與發(fā)布的上域值謂詞比較;在測(cè)試上域值謂詞族時(shí),選取發(fā)布區(qū)域中的下域值謂詞的屬性值進(jìn)行測(cè)試,仍然像非對(duì)成事件匹配一樣進(jìn)行二分查找,把一行中的謂詞分成左右兩部分,左半部的謂詞部分是匹配的;對(duì)于下域值謂詞族的測(cè)試,則取發(fā)布區(qū)域中相應(yīng)的上域值謂詞匹配,還是將謂詞行分割后取左半部;在這樣的對(duì)稱的事件匹配算法中,如果要進(jìn)行正向或者逆向的事件匹配,只需要把一方的訂購(gòu)區(qū)域中的相關(guān)屬性的上域值謂詞和下域值謂詞取相同的值,其他處理仍然一樣。
3.由權(quán)利要求1所述的事件模型中的快速事件匹配方法,其特征是用戶向事件服務(wù)發(fā)送更新已有訂購(gòu)的請(qǐng)求;在分布式虛擬環(huán)境中,需要不斷地更新訂購(gòu);更新訂購(gòu)的處理步驟與加入新訂購(gòu)類似;在謂詞表中,將對(duì)應(yīng)訂購(gòu)的謂詞逐個(gè)替換,并重新排序插入。
全文摘要
事件模型中的快速事件匹配方法步驟如下,分為事件訂購(gòu)和事件匹配兩大部分;事件訂購(gòu)在事件匹配算法的數(shù)據(jù)結(jié)構(gòu)上的事件訂購(gòu)處理就是事件匹配的預(yù)處理過(guò)程,當(dāng)事件服務(wù)接收到新的事件訂購(gòu)后,需要更新謂詞表、接口列表和訂購(gòu)列表;事件匹配在數(shù)據(jù)結(jié)構(gòu)和事件訂購(gòu)的預(yù)處理的基礎(chǔ)上,只需將接收到的事件在謂詞表中逐行進(jìn)行匹配測(cè)試。處理訂購(gòu)區(qū)域與發(fā)布值的正向匹配,還處理發(fā)布區(qū)域與訂購(gòu)值的逆向匹配以及發(fā)布區(qū)域與訂購(gòu)區(qū)域的對(duì)稱匹配;本發(fā)明針對(duì)分布式虛擬環(huán)境中需要?jiǎng)討B(tài)對(duì)稱事件匹配支持的要求,在現(xiàn)有的兩類算法基礎(chǔ)上,提出了一種改進(jìn)的快速事件匹配算法,此算法綜合了兩類算法各自的優(yōu)點(diǎn),提高了匹配的速度和效率。
文檔編號(hào)G06F17/30GK1694094SQ200510040618
公開(kāi)日2005年11月9日 申請(qǐng)日期2005年6月20日 優(yōu)先權(quán)日2005年6月20日
發(fā)明者潘金貴, 貝佳, 沈瑜, 徐曉旸, 蘇紹勇 申請(qǐng)人:南京大學(xué)