基于热点缓存的搜索方法

文档序号:6460673阅读:118来源:国知局

专利名称::基于热点缓存的搜索方法
技术领域
:本发明涉及互联网搜索技术,更具体地说,涉及一种基于热点缓存的搜索方法。
背景技术
:由于互联网的迅速发展,网络上的信息资源越来越多。与此同时,网络资源搜索的需求亦持续增加,促进了网络搜索技术的发展。因此研究快速而准确的搜索技术已是现在网络信息检索的首要任务。不同的网络所使用的搜索技术不尽相同。目前搜索弓I擎主要是以资源服务器为中心的搜索方式,对于服务器要求过高,服务器负荷过重。另外服务器容量亦无法满足网络信息数量以几何形式增长的速度。而P2P对等网络概念的出现则可以很好地解决现有搜索技术的瓶颈。P2P网络广义上分为两种结构化P2P网络和非结构化P2P网络。简单来说,非结构化P2P网络指网络中节点所维护的路由表无严格的组织方式,而结构化P2P网络指网络节点所维护的路由表有严格的逻辑组织方式。在P2P网络中无真正意义上的中心服务器,不需要集中存储资源,任何一个网络中的节点都可作为服务器存在。因此,P2P搜索技术作为一种新兴的网络搜索技术,其发展是未来网络搜索发展的主要方向。现有的几种P2P搜索方法亦分为结构化和非结构化两种。其中非结构化P2P网络搜索方法主要有洪泛、随机漫步等,结构化P2P网络搜索方法主要是基于DHT技术的搜索方法,如Kademlia、Chord、CAN(Content曙AddressableNetwork)、Pastry等。上述几种P2P搜索方法,基本上针对平衡网络的应用场景。然而在现实生活中,经常存在热点的现象,即某时间段内某个特定资源的搜索请求大量增加。现有技术的搜索方法存在查询过程复杂、查询速度低、而且会浪费网络带宽资源的问题。
发明内容针对现有技术的上述缺陷,本发明要在各种搜索协议的基础上进行改进,以使搜索速度更快、带宽消耗更少。本发明的技术方案是,提供一种基于热点缓存的搜索方法,其中任一节点作为发起节点针对某一关键字发出査询请求时,如果是通过转发查询请求而找到保存有关键字列表的索引节点,则从所述索引节点接收关键字列表和索引节点地址,再根据所述关键字列表进行相应操作、同时保存所述索引节点地址;当这个保存了索引节点地址的节点接收到其他节点转来的针对所述关键字的查询请求时,则向当前发起节点返回该索引节点地址,从而使当前发起节点可根据其收到的索引节点地址快速地找到索引节点。本发明的方法中,任一节点作为发起节点针对某一关键字发出査询请求时,可先判断自己是否存有关键字列表或索引节点地址如果自己保存有所述关键字列表,则直接根据所述关键字列表进行相应操作;如果自己保存有所述索引节点地址,则直接根据所述索引节点地址找到所述索引节点,然后从所述索引节点接收所述关键字列表,并根据所述关键字列表进行相应操作;如果自己既未保存关键字列表、也未保存索引节点地址,才按预定规则向相邻节点间转发查询请求。本发明的方法中,在转发査询请求的过程中,任一节点收到其他节点转来的针对所述关键字的查询请求时,先判断自己是否存有关键字列表或索引节点地址如果保存有所述关键字列表,则该节点将其保存的关键字列表和自身地址返回给该发起节点;如果保存有所述索引节点地址,则该节点将其保存的索引节点地址返回给该发起节点;如果该节点中既未保存所述关键字列表、也未保存所述索引节点地址,则再向自己的相邻节点转发所述查询请求,直至找到一个存有关键字列表或索引节点地址的节点。本发明的方法中,所述发起节点将所述索引节点地址保存在自己的热点缓5存区(Cache)中。该热点缓存区中除保存索引节点地址,还可保存热点关键字的优先级信息。由于采取了上述技术方案,本发明的优点包括(l)可提高査询速度,加快查询响应;(2)可保证信息的实时有效性;G)可降低对网络带宽的占用率。图1是本发明热点缓存的原理图2是本发明一个实施例中的处理流程图3是普通Chord协议的查询示例图4是使用了本发明方法的Chord协议的査询示例图5是使用了本发明方法的Chord协议的査询流程图6是Kademlia协议的査询流程图7是Kademlia协议的査询示例图。具体实施例方式由前面的描述可知,针对现有技术的上述缺陷,本发明提出了一种基于热点缓存的搜索方法。为了便于说明,我们把发起关键字查找的节点叫做发起节点,把存储热点资源的节点叫做资源节点,把存储资源节点地址的集合(即key列表)的节点叫做索引节点。本发明的方法是在每个P2P节点的原路由表外添加一个热点缓存区,用于存储索引节点的地址。P2P搜索的首要目的是找到索引节点地址,应用本发明的方法,发起节点可以快速从某一节点的热点缓存区直接获得索引节点地址,而不需要经过多路径的搜索和转发。本发明的方法可与各种P2P网络搜索协议相结合,应用范围广泛,加快原搜索协议的速度,从而减少带宽消耗;另外,本发明的方法主要是在每个节点的路由表上增加一块热点缓存区和相应的缓存信息更新策略,所以实现简单。下面将结合附图和实施例对本发明作进一步说明。图1示出了本发明的原理,其中,假设网络中有节点N1,N2,N3,...,Nx,...,Nk,...,Nm…。每个节点都有一个热点缓存区,即Cache(Nx)。下表对本文中需使用的一些代号进行了说明、定义。<table>tableseeoriginaldocumentpage7</column></row><table>从图l中可以看出,发起节点Nx首次对关键字Key进行査询(lOl),即査找网络中包含该关键字的所有文件d。经过Ny和Nz的转发(102,103),在索引节点Nk处查找到key列表,所以Nk是索引节点;Key列表包含资源节点的地址,即文件d所存放节点的IP地址和端口号列表,Key列表的表达方式是〈Key:IP(d),PORT(d)〉。索引节点Nk将key列表〈Key:IP(d),PORT(d)〉和自身的IP地址和端口<Key:IP(k),PORT(k)〉返回给发起节点Nx(104);然后,发起节点Nx根据〈Key:IP(d),PORT(d)〉连接目标节点,例如连接存放d文件的节点,从而能够下载到文件d;同时,还把索引节点地址〈Key:IP(k),PORT(k)〉存入Cache中(105),这是本发明的改进重点所在。在本次查询结束之后,如果再有节点Nn对关键字Key发起査询,当转发到Nx时(106),Nx就直接从自己的Cache中将索引节点地址〈Key:IP(k),PORT(k)〉返回给Nn(106),此时Nn可直接与索引节点通信,而不必进行后续的转发,同样,Nn也会把收到的索引节点地址〈Key:IP(k),PORT(k)〉存入自己的Cache中。具体实施时,热点缓存Cache(Nx)由HopSpot[i]、Count[i]两部分组成,其中参数i是系统动态设置的缓存容量。HopSpot[i]的元素是〈Key,IP,(k),PORT(k)>,记录着索引节点的地址;Count[i]是热点关键字的优先级,热点关键字被越频繁发起查询,其在热点缓存中的优先级越高。热点缓存Cache(Nx)的更新方法是当缓存容量满了后,根据Coimt[i]所显示的优先级,通过一定的算法,对优先级比较低的热点进行更新。采取上述方案后,对关键定的查询次数越多,则会有更多节点中保存所述索引节点地址,当其他节点发起新的査询请求时,可快速从相邻节点中获取索引节点地址,再根据索引节点地址与索引节点连接,最终有有益效果包括(1)将索引节点地址存储在Nx的Cache中,可以加快对Key的査询速度,因为这个查询请求到达Nx后,Nx直接将索引节点地址返回给发起节点,而不必再通过后续中间节点Ny及Nz的转发,才得到索引节点地址,减少了査询转发的次数。当这个Key是个热点关键字时,如果很多发起节点对Key进行查询并保存索引节点的话,网络中就会大量存在Key的索引节点地址,这样就会减少查找Key索引节点地址所发生的转发流量,从而提高查询速度。(2)将索引节点地址存储在Nx的Cache中,可以保证信息的实时有效性。因为在动态网络中Key所对应的资源节点在不停更新,根据结构化系统的要求,这些更新信息将会发布在索引节点Nk上,所以节点Nk上有关Key的列表始终都是最新的,即列表〈Key:IP(d),PORT(d)〉始终是最新的。保存索引节点地址就是为了使发起节点获得的key列表是最新的。若Nx直接保存key列表,则发起节点得到的信息可能是过时的,比如〈Key:IP(d),PORT(d)>所指向的节点可能退出网络了,也可能资源节点将文件d删除或不再共享。这样的话,发起节点得到的信息就无效或者过时,这样反而增加了查询的复杂性并降低了査询的成功率。(3)从整体上看,通过减少转发次数而减少信息在网络上传输次数和存在的时间,可降低对网络带宽的消耗。如图2所示为一个基于热点缓存的具体査询流程,其中,任一节点作为发起节点针对某一关键字发出査询请求(201)时,判断自己是否存有关键字列表(202)、并判断自己是否存有索引节点地址(203):如果自己保存有所述关键字列表,则直接根据所述关键字列表进行相应操作(213);如果自己保存有所述索引节点地址,则直接根据所述索引节点地址找到所述索引节点(211),然后从所述索引节点接收所述关键字列表(212),并根据所述关键字列表进行相应操作(213);如果自己既未保存关键字列表、也未保存索引节点地址,才按预定规则向相邻节点间转发査询请求。在转发查询请求(204)的过程中,任一节点收到其他节点转来的针对所述关键字的査询请求时,判断自己是否存有关键字列表(205)、并判断自己是否存有索引节点地址(206):如果保存有所述关键字列表,则该节点即为该key值的索引节点。索引节点将其保存的关键字列表和自身地址返回给该发起节点(208,209),并更新自己的Cache。发起节点收到返回信息后再根据所述关键字列表进行相应操作、同时保存所述索引节点地址(210);如果保存有所述索引节点地址,则该节点将其保存的索引节点地址返回给该发起节点,并更新自己的Cache。发起节点根据返回的索引节点地址连接索引节点(207),然后从索引节点接收关键字列表和索引节点地址(209),再根据所述关键字列表进行相应操作、同时保存所述索引节点地址(210);本步骤处理方法可根据具体协议做相应改变。如果该节点中既未保存所述关键字列表、也未保存所述索引节点地址,,则再向自己的相邻节点转发所述查询请求(204),如此反复,直至找到一个存有关键字列表或索引节点地址的节点。9下面进一步以Chord搜索协议为例,说明本发明与现有搜索协议结合使用的实施方法。Chord协议构建的网络为一环形网络Chord环,网络中的所有节点均在环上。查询是单方向的,用平面图表示即Chord网络节点的查询轨迹是顺时针的。每个节点维护一个路由表,称为FingerTable。路由表的存储信息如下从节点i出发,离本节点距离(1>=2八〗(]=0,1,2,...)的节点的信息。Chord的査询机制很简单,发起节点在本身路由表中选择最接近目标节点的节点作为下一跳,发送査询信息。接收到查询信息的节点亦搜索自己的路由表,若存有目标节点的信息,则将该信息返回给发起节点,搜索终止;否则,则选择下一跳将査询请求传递下去。如此重复下去,直到找到存有目标节点的索引节点为止。图3是普通Chord的查询过程。Nx通过Ny,Nz(301,302),然后在Nk那得到目标节点的信息(303,304),此次査询完成。其后的Nn亦对同样的目标节点发起查询,要经过包括Nx,Ny,Nz的中间节点(305,301,302),然后在节点Nk处得到所要信息(303,306)。图4是使用了本发明的改进Chord的查询过程。Nx通过Ny,Nz,然后在Nk那得到目标节点的信息(401,402,403,404),此次査询完成。但若接下来有节点Nn对同样索引节点进行査询,当该査询请求转发到Nx(405)时,可直接从Nx处转到Nk(406),然后得到所要的目标节点的信息(407),本次查询结束。对比可知应用的热点缓存的二次查询,查询跳数要比原协议明显减少,这是应用本发明得到的效果。下面是本发明与Chord协议结合的具体实施方法见图5第一步发起节点Nx在自己的Cache中査找索引节点地址(501),如果存在则对索引节点发起请求Send(Nx,Nk,hop++,Key)(507),进入第三步。如果不存在,贝UNx在自己的FingerTable中查找key列表〈Key,IP(d),Port(d)>(502),如果目标节点Nd存在,则对Nd发起请求Send(Nx,Nd,hop++,Key),查询结束。如果Nd不存在,则Nx在FingerTable找一个最接近Nd的节点Ny进行下一步査询(503):Send(Nx,Ny,hop++,Key),进入第二步。第二步节点Ny(Nz)在接收到查询信息后,在自己的Cache中查找(504),如果索引节点地址〈Key,IP,Port〉存在,则向Nk发送请求Send(Nx,Nk,hop++,Key)(507),并更新Cache中〈Key,IP,Port〉对应的Count[i](506),进入第三步;若〈Key,IP,Por^不存在于Cache中,Nx就在自己的FingerTable中查找Nd,如果Nd存在于Ny(Nz)的FingerTable中,则该节点Ny(Nz)即为索引节点Nk,进入第三步;若不存在,则Ny在FingerTable找一个最接近Nd的节点Nz进行转发(505):Send(Nx,Nz,hop++,Key)。重复第二步。第三步索引节点Nk返回资源节点地址列表,即Key列表给Nx:Send(Nk,Nx,hop++,Key),同时返回自己地址信息给Nx。Nx收到后,更新Cache(508)。如果Nx的Cache中已存有索引节点地址〈Key,IP(k),Port(k)>,则只要更新对应的Count[i];如果没有,则在Cache中,将〈Key,IP(k),Port(k)〉存入HopSpot[i]中,并初始化对应的Count[i]。査询过程完成。另外再以Kademlia协议与热点缓存结合为例,体现本发明可以和各种搜索协议结合的通用性。Kademlia协议构建的网络为一棵巨大的二叉树,节点的路由表存储着一些除本身外其他子树的节点信息。其路由表称为k-bucket,第i个k-kucket存储着距离本节点在区间[2i,2i+l]]内的节点的信息,这里,距离是以节点ID的异或值决定的,其中0<=i<=160。Kedemlia协议采用异步迭代方式査找,所有查询请求均由发起节点发起,简单归纳为下面几步见图6第一步发起节点Nx从自身K-bucket中挑选若干个(常数a,值可自定)自认为最接近的节点,发送査询信息(601)。第二步接收到査询信息的节点Ni(602)判断本节点是否为目标索引节点。若是目标索引节点则返回确定信息(604),否则从自身K-bucket中挑选若干个距离目标索引节点最接近的节点地址返回发起节点(603)。第三步发起节点Nx接收到返回信息后(605),若有确认信息,则向目标节点发起连接(607),结束査询。否则,再将返回信息与自身K-bucket中的信ii息比较(606),重新选出若干个节点发送査询信息,重复第二步。与本发明结合后的查询算法如下-第一步发起节点Nx从自身K-bucket及Cache中挑选a个自认为最接近目标节点Nd的节点,发送请求查询信息。第二步接收到査询信息的节点Ni在自己的路有表和Cache中查找,并判断本节点是否为目标节点或者是否存有目标节点Nd的信息。若是目标节点则返回确定信息,若是存有目标节点信息,则该节点即为索引节点Nk,Nk将自身节点信息〈Key:IP(k),PORT(k)〉与及Key列表信息〈Key:IP(d),PORT(d)>一并返回,并在cache中更新对应信息的Count[i],否则从自身K-bucket中挑选a个自认为距离目标节点最接近的节点信息返回给发起节点。第三步发起节点Nx接收到返回信息后,若有Nd返回的确认信息,则结束查询,向目标节点请求连接;若收到的信息是存有索引节点信息的Nk返回的信息,如果Cache中没有Nk的信息,则将〈Key:IP(k),PORT(k)〉保存在自己的Cache;如果Cache已存有Nk的信息,则更新相应的优先级Count[i]。然后根据Key列表,向目标节点发送信息,等待确认连接;否则,再将返回信息与自身K-bucket中的信息比较,重新选出若干个节点发送请求查询信息,重复第二步。图7显示了Kademlia协议与热点缓存结合的査询过程。Nx发起对索引节点Nk的查询,通过中间节点Ny,Nz(701,702)在节点Nk处得到key列表信息(703),将Nk存入Nx的Cache中,并向资源节点发出请求(704),査询结束。而接下来的Nm同样查询索引节点Nk,查询到Nx时直接从Nx处得到节点Nk的地址(705),于是直接从Nk节点获取Key列表(706),不需经过其他中间节点如Ny和Nz。然后向资源节点发送请求(707),查询结束。从图中可明显看出结合了本发明的Kademlia协议査询的跳数明显比原协议少。1权利要求1、一种基于热点缓存的搜索方法,其特征在于,其中任一节点作为发起节点针对某一关键字发出查询请求时,如果是通过转发查询请求而找到保存有关键字列表的索引节点,则从所述索引节点接收关键字列表和索引节点地址,再根据所述关键字列表进行相应操作、同时保存所述索引节点地址;当这个保存了索引节点地址的节点接收到其他节点转来的针对所述关键字的查询请求时,则向当前发起节点返回该索引节点地址。2、根据权利要求1所述的基于热点缓存的搜索方法,其特征在于,任一节点作为发起节点针对某一关键字发出査询请求时,先判断自己是否存有关键字列表或索引节点地址-如果自己保存有所述关键字列表,则直接根据所述关键字列表进行相应操作;如果自己保存有所述索引节点地址,则直接根据所述索引节点地址找到所述索引节点,然后从所述索引节点接收所述关键字列表,并根据所述关键字列表进行相应操作;如果自己既未保存关键字列表、也未保存索引节点地址,才按预定规则向相邻节点间转发査询请求。3、根据权利要求1所述的基于热点缓存的搜索方法,其特征在于,在转发查询请求的过程中,任一节点收到其他节点转来的针对所述关键字的查询请求时,先判断自己是否存有关键字列表或索引节点地址如果保存有所述关键字列表,则该节点将其保存的关键字列表和自身地址返回给该发起节点;如果保存有所述索引节点地址,则该节点将其保存的索引节点地址返回给该发起节点;如果该节点中既未保存所述关键字列表、也未保存所述索引节点地址,则再向自己的相邻节点转发所述査询请求。4、根据权利要求1所述的基于热点缓存的搜索方法,其特征在于,所述发起节点将所述索引节点地址保存在自己的热点缓存区(Cache)中。5、根据权利要求4所述的基于热点缓存的搜索方法,其特征在于,所述热点缓存区中除保存索引节点地址,还保存热点关键字的优先级信息。6、根据权利要求5所述的基于热点缓存的搜索方法,其特征在于,所述索引节点地址和热点关键字的优先级信息分别由H叩Spot[i]、Coimt[i]表达,其中参数i是系统动态设置的缓存容量;所述HopSpot[i]的元素是〈Key,IP,(k),PORT(k)>,记录着索引节点的地址;所述Coimt[i]是热点关键字的优先级,热点关键字被越频繁发起查询,其在热点缓存中的优先级越高。7、根据权利要求1-6任一项所述的基于热点缓存的搜索方法,其特征在于,所述搜索方法是Chord协议搜索方法、或者是Kademlia协议搜索方法。全文摘要本发明涉及一种基于热点缓存的搜索方法,为解决现有搜索方法查询过程复杂的问题,本发明中,任一节点作为发起节点针对某一关键字发出查询请求时,如果是通过转发查询请求而找到保存有关键字列表的索引节点,则从所述索引节点接收关键字列表和索引节点地址,再根据所述关键字列表进行相应操作、同时保存所述索引节点地址;当这个保存了索引节点地址的节点接收到其他节点转来的针对所述关键字的查询请求时,则向当前发起节点返回该索引节点地址,使得当前发起节点可根据其收到的索引节点地址快速地找到索引节点。本发明的方法可提高查询速度、加快查询响应,可保证信息的实时有效性,并可降低对网络带宽的占用率。文档编号G06F17/30GK101488137SQ20081006505公开日2009年7月22日申请日期2008年1月14日优先权日2008年1月14日发明者梁蕾娟,陈剑勇,龙海建申请人:深圳三石科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1