主权项 |
1.一种发布订阅系统中基于属性流行度的事件匹配方法,其特征在于包括以下步骤:第一步,根据应用的历史数据,获得发布订阅系统中各个属性的流行度,并把流行度超过<i>k</i>的属性赋给属性集合<i>MPAS</i>,<i>k</i>为50%;第二步,订阅者根据<i>MPAS</i>确定订阅存储所需要的汇聚节点,进行订阅注册,方法是:步骤2.1如果订阅的发送集合<img file="2010102873536100001DEST_PATH_IMAGE002.GIF" wi="22" he="22" />中只有一个元素<i>T,</i>执行步骤2.1.1,如果<img file="144477DEST_PATH_IMAGE002.GIF" wi="22" he="22" />中元素个数超过一个,执行步骤2.1.2;<img file="192068DEST_PATH_IMAGE002.GIF" wi="22" he="22" />= {<i>T</i>|<img file="2010102873536100001DEST_PATH_IMAGE004.GIF" wi="25" he="22" /><img file="2010102873536100001DEST_PATH_IMAGE006.GIF" wi="20" he="20" /><i>T</i> & <i>T </i>}<img file="564143DEST_PATH_IMAGE006.GIF" wi="20" he="20" /><img file="697184DEST_PATH_IMAGE004.GIF" wi="25" he="22" /><img file="2010102873536100001DEST_PATH_IMAGE008.GIF" wi="21" he="17" /><i>MPAS</i>},<img file="812908DEST_PATH_IMAGE004.GIF" wi="25" he="22" />为订阅<i>s</i>的属性集合;步骤2.1.1定义名字<i>key</i> = <i>Hash</i>(<i>T</i>),再调用DHTs的查询函数lookup(<i>key</i>),找到负责<i>key</i>的汇聚节点,然后把订阅消息<i>sub</i>直接发送给负责<i>key</i>的汇聚节点;<i>sub</i> 是一个二元组,由订阅<i>s</i>和<i>s</i>的订阅者节点名字<i>sID</i>组成,表示为(<i>s,sID</i>);转步骤2.2;步骤2.1.2,先定义名字集合<i>KeySet</i>,对<img file="652688DEST_PATH_IMAGE002.GIF" wi="22" he="22" />中的每一个元素<i>T</i>计算哈希值,并把哈希值加入到<i>KeySet</i>中,即<i>KeySet</i> = {<i>Hash</i>(<i>T</i>)|<i>T</i>∈<img file="195665DEST_PATH_IMAGE002.GIF" wi="22" he="22" />},然后订阅者采用组播方法将<i>sub</i>发送给负责<i>KeySet</i>中每个名字的汇聚节点;步骤2.2 每一个收到<i>sub</i>的汇聚节点存储<i>sub</i>;第三步,发布者根据<i>MPAS</i>确定事件发布所需要的汇聚节点,进行事件发布,方法是:步骤3.1 若事件的发送集合<img file="2010102873536100001DEST_PATH_IMAGE010.GIF" wi="21" he="22" />中只含有一个元素<i>T</i>,执行步骤3.1.1,若<img file="550423DEST_PATH_IMAGE010.GIF" wi="21" he="22" />中元素超过一个,执行3.1.2;<img file="407520DEST_PATH_IMAGE010.GIF" wi="21" he="22" />= {<i>T</i>|<i>T </i><img file="164124DEST_PATH_IMAGE006.GIF" wi="20" he="20" /><img file="2010102873536100001DEST_PATH_IMAGE012.GIF" wi="25" he="22" />& <i>T </i><img file="2010102873536100001DEST_PATH_IMAGE014.GIF" wi="20" he="20" /><img file="878002DEST_PATH_IMAGE012.GIF" wi="25" he="22" /><img file="2010102873536100001DEST_PATH_IMAGE016.GIF" wi="21" he="17" /><i>MPAS</i>},<img file="985635DEST_PATH_IMAGE012.GIF" wi="25" he="22" />是事件<i>e</i>的属性集合;步骤3.1.1调用底层DHTs的函数lookup(<i>Hash</i> (<i>T</i>)),找到负责<i>Hash</i> (<i>T</i>)的汇聚节点,然后把事件<i>e</i>直接发送给负责<i>Hash</i> (<i>T</i>)的汇聚节点;转步骤3.2;步骤3.1.2定义名字集合<i>KeySet</i> = {<i> Hash</i> (<i>T</i>)|<i>T</i>∈<img file="380844DEST_PATH_IMAGE010.GIF" wi="21" he="22" />},然后采用组播方法将事件<i>e</i>发送给负责<i>KeySet</i>中每个名字的汇聚节点;步骤3.2 每一个收到事件<i>e</i>的汇聚节点把<i>e</i>和存储于本地的订阅消息中的订阅进行匹配操作,产生匹配事件<i>e</i>的订阅者列表<i>SubscriberList</i>,即对于每一个存储的订阅消息<i>sub</i> = (<i>s</i>,<i>sID</i>),如果<i>s</i>匹配<i>e</i>,则把<i>sID</i>加入到<i>SubscriberList</i>;步骤3.3 每一个收到事件<i>e</i>的汇聚节点把事件<i>e</i>转发给订阅者,如果<i>SubscriberList</i>只含有一个元素<i>sID</i>,执行步骤3.3.1,如果<i>SubscriberList</i>含有多个元素,执行步骤3.3.2;步骤3.3.1调用route(<i>e</i>, <i>sID</i>)把事件<i>e</i>转发给订阅者<i>sID</i>,route()为DHTs标准的路由方法;结束;步骤3.3.2采用组播方法把事件<i>e</i>转发给<i>SubscriberList</i>中的每一个订阅者,结束。 |