本發(fā)明屬于網絡技術領域,具體涉及一種 網絡數據集搜索方法。
背景技術:
無線傳感器網絡包含大量的傳感器節(jié)點,可感知周圍的信息,能夠感知的信息有:環(huán)境溫度、濕度、甚至是否有某種動物經過等等?;跓o線傳感器網絡的應用常需要對一個數據集進行搜索,即按照一個信息的取值集合來進行相關信息的匹配和查找。如在部署了傳感器網絡的動物園管理的應用,常需要從某個指定傳感器節(jié)點開始尋找最近的麋鹿、豺狼和虎豹經過的傳感器節(jié)點記錄(這里的麋鹿、豺狼和虎豹即為被搜索的數據集)。這就需要傳感器網絡能夠從任意節(jié)點開始通過查詢消息的路由,找到最近的、存儲在某些傳感器節(jié)點上的數據集。為在無線傳感器網絡中有效的處理這種對一個數據集的搜索,需要一個有效的集合搜索方法,使得能夠通過盡可能少的消息傳遞、在盡可能小的傳感器搜索范圍內,找到離某個指定節(jié)點最近的存儲了被搜索數據集的一個節(jié)點集。最直接的方法是由無線傳感器網絡中的Sink節(jié)點(總控節(jié)點)向全網廣播數據集搜索請求,所有接收到搜索請求的節(jié)點查找自己的本地采集數據,檢查是否有滿足搜索請求的數據記錄,如果有,則向Sink節(jié)點返回匹配數據集,同時向周圍節(jié)點繼續(xù)傳播搜索請求,直到全網節(jié)點都收到集合搜索請求并做了相應處理?,F有的向全網廣播的方法能夠找到全網內所有包含被搜索數據集的節(jié)點,但廣播的方式會消耗大量的消息傳遞,且很多應用不需要找到存儲了被被搜索數據集的所有節(jié)點,費時費力。目前, 通過盡可能少的消息傳遞、在盡可能小的傳感器搜索范圍內,找到被搜索的數據集的搜索方法未見報道。
技術實現要素:
本發(fā)明克服了現有技術的不足,提出了一種 網絡數據集搜索方法,該方法能夠在一個無線傳感器網絡中任意指定源節(jié)點開始,爭取通過受限的消息傳播,找到搜索目標,減少了搜索數據集的消息傳遞量,能夠大幅提高無線傳感器網絡生命期。
本發(fā)明的技術方案為: 網絡數據集搜索方法,在一個無線傳感器網絡中任意指定源節(jié)點開始,通過受限的消息傳播(搜索消息在節(jié)點中的傳播控制在源節(jié)點附近一個盡可能小的范圍內),尋找存儲了某個數據集的較小節(jié)點集;該方法在每個節(jié)點中分布式的實現,被搜索的節(jié)點集在搜索過程中動態(tài)變化,實現一種累積式的搜索,被搜索節(jié)點集逐步擴大,直到被搜索數據集中的所有數據的存儲位置都被找到。
所述搜索方法是基于消息的分布式傳播,包括search消息、ack消息、和research消息,在搜索過程中,符合搜索條件的中間結點稱為center節(jié)點。
所述search消息按生成樹(spanning)方式發(fā)送,用于進行數據集的累積查找,search消息包含四部分內容:
1)要搜索的數據集;
2)轉發(fā)此消息的上一跳節(jié)點標識;
3)初始化此消息的center節(jié)點標識;
4)此消息目前傳遞的跳數。
所述 ack消息為單播發(fā)送,用于存儲了被搜索數據集中數據的節(jié)點向center節(jié)點匯報,ack消息包含四部分內容:
1)找到的數據集;
2)找到的數據集的節(jié)點標識;
3)該消息的下一跳節(jié)點標識;
4)該消息的目的地center節(jié)點標識。
所述research消息為多播發(fā)送,用于center節(jié)點通知其子節(jié)點進行下述兩種動作:
a)停止search消息傳遞;
b)或成為下一級center節(jié)點繼續(xù)新search消息傳遞。
所述消息包含三部分內容:
1)指定的下一級center的標識;
2)指定的由下一級center節(jié)點負責搜索的數據集;
3)下一跳節(jié)點集。
本發(fā)明具有如下有益效果:
1)此方法將search消息按照生成樹(spanning)方式進行傳播,且將傳播范圍限制在出發(fā)節(jié)點附近、存儲了被搜索數據集的節(jié)點集上,極大地減少了參與搜索的節(jié)點個數,從而大大減少了消息傳播數量。
2)新center節(jié)點找到后向上一級center節(jié)點的返回ack消息的傳播過程是單播過程,能夠大大減少消息的傳播數量。
3) center節(jié)點通知leaf節(jié)點停止或成為下一級center的過程是多播過程,能夠大大減少消息的傳播量。
4)本發(fā)明減少了搜索數據集的消息傳遞量,能夠大幅提高無線傳感器網絡生命期。
附圖說明
圖1表示本發(fā)明所述方法搜集無線傳感器網絡數據集的示意圖。
圖中,1.網絡中的一般的節(jié)點;2.表示網絡中的leaf節(jié)點; 3. search消息的發(fā)送;4. ack消息向center節(jié)點的單播返回4。
具體實施方式
以下結合實施例進一步說明。
本發(fā)明能夠在一個無線傳感器網絡中任意指定源節(jié)點開始,爭取通過受限的消息傳播(搜索消息在節(jié)點中的傳播控制在源節(jié)點附近一個盡可能小的范圍內),尋找存儲了某個數據集的較小節(jié)點集。該方法在每個節(jié)點中分布式的實現,被搜索的節(jié)點集在搜索過程中動態(tài)變化,實現一種累積式的搜索,被搜索節(jié)點集逐步擴大,直到被搜索數據集中的所有數據的存儲位置都被找到。
如圖1所示,網絡中包含了一般的節(jié)點1、算法所用到的網絡中的leaf節(jié)點2和 search消息的發(fā)送3,該發(fā)送由實心的箭頭表示,另外還包含了代表ack消息向center節(jié)點的單播返回4,圖中用虛線表示。
本方法的實現基于消息的分布式傳播,首先介紹本方法所使用的三類消息,search消息、ack消息、research消息:
search消息:該類消息按生成樹(spanning)方式發(fā)送,用于進行數據集的累積查找。此類消息包含4部分內容:1)此消息要搜索的數據集,記為search.Q;2)轉發(fā)此消息的上一跳節(jié)點標識,記為search.from;3)初始化此消息的center節(jié)點標識,記為search.fromCenter;4)此消息目前傳遞的跳數,記為search.hop。
ack消息:該類消息為單播發(fā)送,用于存儲了被搜索數據集中數據的節(jié)點向center節(jié)點匯報。該消息3部分內容:1)找到的數據集,記為ack.found;2)找到ack.found數據集的節(jié)點標識,記為ack.source;3)該消息的下一跳節(jié)點標識,記為ack.next;4) 該消息的目的地center節(jié)點標識,記為ack.toCenter
research消息:該類消息為多播發(fā)送,用于center節(jié)點通知其leaf節(jié)點進行下述兩種動作:a)停止search消息傳遞,b)或成為下一級center節(jié)點繼續(xù)新search消息傳遞。此類消息包含2部分內容:1)指定的下一級center的標識,記為research.newCenter;2)指定的由下一級center節(jié)點負責搜索的數據集,記為research.Q;3)下一跳節(jié)點集,記為research.nexts
pong消息:該類消息為單播1跳消息,用于將自己的標識通知search消息形成的父節(jié)點,以便讓父節(jié)點添加到發(fā)送此pong消息的路由。此類消息包含2部分內容:1)發(fā)送該消息的節(jié)點標識,記為pong.from;2)該消息的下一跳目的節(jié)點標識,記為pong.to;
每個節(jié)點維護有反向路由表和正向路由表:反向路由表由pong消息在各節(jié)點上形成;正向路由表在search消息傳遞過程中再各節(jié)點中形成。具體的形成過程可參考下面的分布式算法實現過程。
初始時,每個節(jié)點的反向和正向路由表都為空集。如圖1為例,本發(fā)明提出的方法以下面所述各節(jié)點上的分布式執(zhí)行,實現了從出發(fā)節(jié)點開始搜索數據集query={1,2,3,4,5},以一種累積的方式逐步找到數據集中所有數據的過程:
令出發(fā)節(jié)點作為center節(jié)點,執(zhí)行步驟2的操作。
若該center節(jié)點是出發(fā)節(jié)點,則a) 初始化一個search消息;b)令search.from=出發(fā)節(jié)點標識,search.fromCenter=出發(fā)節(jié)點標識,search.Q = query – local(本地存儲數據集),search.hop=0;3)若search.Q為空集則結束;否則進入步驟4。
若該節(jié)點是收到上一級center結點發(fā)來的research消息后成為的center節(jié)點,則該節(jié)點進行如下操作:a)初始化一個search消息,b)令search.from=本地節(jié)點標識,search.fromCenter=本地節(jié)點標識,search.Q=research.Q(即從上一級center節(jié)點收到的research消息中包含的搜索數據集),search.hop=0;c)向鄰居節(jié)點傳播此search消息(接收到此search消息的節(jié)點按照步驟10的操作執(zhí)行);d)繼續(xù)步驟4的操作。
該center節(jié)點等待MaxHops*t1長的時間(其中MaxHops是此網絡邊緣兩節(jié)點間的最大跳數,t1為消息傳播1跳所耗費的最大時間),若MaxHops*t1時間內無任何ack消息返回,則認為搜索失敗,向上一級center節(jié)點匯報(注意,若該center節(jié)點本身是出發(fā)節(jié)點則直接結束搜索,向用戶返回搜索失敗消息);否則,繼續(xù)執(zhí)行步驟5操作。
設center節(jié)點對返回的所有ack消息中包含的數據集ack.found進行合并操作得到的集合為q1,若q1=search.Q,則表明已找到數據集中所有數據,進入步驟6;否則進入步驟7。
該center節(jié)點執(zhí)行下述操作:a)初始化一個research消息;b)令research.Q=空,research.newCenter=空;c)令research.TOs=本地正向路由表中包含的節(jié)點集;d)向該center節(jié)點的所有l(wèi)eaf節(jié)點多播發(fā)送research消息(多播發(fā)送的實現參考步驟8和9),從而使其所有l(wèi)eaf節(jié)點停止消息的傳播。注意,這里的的research消息的發(fā)送是多播操作(多播路徑按照上一次search和pong消息的傳播過程,生成在各節(jié)點的正向路由表中)。
該center節(jié)點執(zhí)行下述操作:a)初始化一個research消息;b)令research.Q=search.Q – q1;c)從返回ack消息的節(jié)點中選擇發(fā)送最大ack.found集合的節(jié)點作為新的center節(jié)點(若候選節(jié)點有多個,選擇節(jié)點標識最大的那一個),記新選擇的center節(jié)點標識為c1,令research.newCenter=c1;d)令research.nexts=本地正向路由表中包含的節(jié)點集;e)向該center節(jié)點的所有l(wèi)eaf節(jié)點多播發(fā)送research消息(參考步驟8和9),從而使新的center節(jié)點(某一個leaf節(jié)點)接收到research消息后重新按照步驟3的操作執(zhí)行,其他leaf節(jié)點則停止消息的傳播。
[research消息多播的實現] 任何一個收到research消息的節(jié)點首先檢查自己是否屬于research.nexts,若否,則丟棄該research消息,否則,記自己的正向路由表中包含的節(jié)點集為p1,若p1為空則表明該消息已到達leaf節(jié)點,進入步驟9繼續(xù)執(zhí)行,否則,令research.nexts=q1,繼續(xù)向周圍鄰居多播。
收到research消息的leaf節(jié)點檢查research.newCenter是否等于本地節(jié)點標識,若是,則將該leaf節(jié)點改為新的下一級center節(jié)點,回到步驟3繼續(xù)執(zhí)行(創(chuàng)建新search消息,對research消息中包含的數據集進行搜索);否則,停止消息的傳播。
[search消息按照生成樹(spanning)方式進行傳播的實現] 任何一個收到search消息的節(jié)點首先判斷自己是否曾收到過來自search.center的search消息,若是,則丟棄該消息;否則該節(jié)點標記自己為leaf節(jié)點,并進行如下操作:a)將search消息中的跳數計數器search.hop加1(即search.hop=search.hop+1);b)根據search.fromCenter和search.from的內容,在本地反向路由表中添加一條到search.fromCenter的路由(用于必要時向初始化此消息的center節(jié)點單播返回ack消息);c)向發(fā)送此search消息的上一跳節(jié)點單播返回pong消息(收到此pong消息的節(jié)點向自己的本地正向路由表中添加一條到達發(fā)送hello消息的節(jié)點的路由。注意:center節(jié)點可利用此路由,多播通知其leaf節(jié)點——停止search消息傳遞或成為下一級center節(jié)點繼續(xù)新search消息傳遞);d)該節(jié)點從一收到search消息開始等待2*search.hop*t1時間(注意,t1為消息傳播1跳所耗費的最大時間),若2*search.hop*t1時間內未收到過research消息,則將該節(jié)點改為普通節(jié)點并按照步驟10的操作繼續(xù)轉發(fā)此search消息到鄰居節(jié)點;否則,執(zhí)行步驟9;e)檢查search.Q∩local是否為空集,若否則還續(xù)額外執(zhí)行步驟11的操作。
ack消息單播返回center節(jié)點的實現, 該節(jié)點進行如下操作:1)初始化一個ack消息,該消息中包含本地節(jié)點數據集(記為local)與search.Q的交集,令該數據集為ack.found=search.Q∩local;b)令ack.toCenter=search.fromCenter,ack.source=本地節(jié)點標識;c)令ack.next=查找本地反向路由表找到的到達ack.toCenter的下一跳節(jié)點標識;d)按照步驟12執(zhí)行,向ack.toCenter指向的節(jié)點返回ack消息,注意,這里的ack消息由每個節(jié)點參照自己的反向路由表進行單播路由返回。
收到ack消息的節(jié)點檢查ack.next是否等于本地節(jié)點標識,若否,則丟棄該消息;若是,則令ack.next=查找本地反向路由表找到的到達ack.toCenter的下一跳節(jié)點標識,向下一跳節(jié)點繼續(xù)轉發(fā)該消息,直至該消息到達ack.toCenter。
本發(fā)明將”search”消息按照生成樹(spanning)方式進行傳播,且將傳播范圍限制在出發(fā)節(jié)點附近、存儲了被搜索數據集的節(jié)點集上,極大地減少了參與搜索的節(jié)點個數,從而減少了消息傳播數量;新center節(jié)點找到后向上一級center節(jié)點的返回“ack”消息的傳播過程是單播過程,能夠減少消息的傳播數量;center節(jié)點通知leaf節(jié)點停止或成為下一級center的過程是多播過程,能夠減少消息的傳播量。以上三點在無線傳感器網絡中極大地減少了搜索數據集的消息傳遞量,因此能夠提高無線傳感器網絡生命期。