发明内容
本发明所要解决的技术问题是:提供一种基于P2P的查找有关节点子集合的方法,该方法采用综合多倍的虚拟树型结构化网络和随机缓存的非结构网络来构建P2P覆盖网络,并以此为基础,采用类SQL语言查找相关的节点子集合。
为了解决上述技术问题,本发明的方法采用以下技术方案:
一种基于P2P的查找有关节点子集合的方法,包括按用户需求的主题领域建立网络领域分类的步骤、构建领域分类网络的步骤、基于领域分类网络查询节点子集合的步骤,其特征在于领域分类网络是基于领域的P2P覆盖网络,其具体构建步骤包括:
1)网络起始节点设置其路由表内容,并建立虚拟组,路由表内容主要包括节点实体信息,所述实体信息包含节点ID和IP地址,其中节点ID为用户名@域名,域名由几级组成,各分级之间由圆点“.”隔开,各分级均是具有领域分类含义的文字及字符,虚拟组根据领域分类含义划分为分级的域,
2)节点加入P2P覆盖网络,节点根据分级的域加入领域的P2P覆盖网络,节点加入步骤具体如下:
a)节点A按领域确定要加入的虚拟组,并找到已加入此虚拟组的一个节点;
b)节点A向此节点发送包含节点A实体信息的加入消息,此节点向该虚拟组所有其他节点转发该加入消息;
c)虚拟组每个节点将节点A的实体信息增加到自己的路由表中,同时向节点A发送包含自身节点实体信息的确认消息,节点A将虚拟组每个节点的实体信息增加到自己的路由表中;
d)判断是否是根虚拟组或虚拟组中已有N个节点加入上层虚拟组,若判断结果是,则节点A加入步骤结束,若判断结果否,则找到上一层虚拟组的一个节点,并重复步骤b)~d)。
2)节点离开P2P覆盖网络。
其中节点离开P2P覆盖网络的步骤具体如下:
2a)离开节点B寻找到自己加入的最顶层虚拟组的一个节点;
2b)离开节点B向此节点发送包含节点B实体信息的离开消息;此节点向虚拟组所有其他节点转发该离开消息;
2c)虚拟组每个节点从自己的路由表中将节点B实体信息删除,同时向离开节点B发送确认消息;
2d)判断是否是最底层虚拟组,若判断结果是,则节点B离开步骤结束,若判断结果否,则找到下一层虚拟组的一个节点,并重复步骤2b)~2d)。
其中查询节点子集合的步骤具体如下:
3a)用户根据要查询的领域,用类SQL语言编写查询语句;
3b)用户节点将查询语句解析为目标节点的目标虚拟组域名,和本地SQL语句,并将其放入查询消息中;
3c)用户节点通过查找其路由表,转发查询消息到更接近目标虚拟组域名的邻近节点;
3d)邻近的节点通过查找其路由表,转发查询消息到更接近目标虚拟组域名的节点;
3e)判断是否是目标虚拟组,若判断结果是,则执行下一步骤,若判断结果否,则重复步骤3d)~3e);
3f)目标虚拟组一节点C对目标虚拟组的所有节点广播查询消息;
3g)目标虚拟组所有节点利用本地SQL语句,查找符合查询条件的信息,并将查找结果返回给查询消息广播节点C,查询消息广播节点C整合查找结果,并发送到用户节点。
其中用类SQL语言编写的查询语句为:
SELECT{*|expr[[AS]c_alias]{,expr[[AS]c_alias]...}}FROMdomainref[WHERE search_condition];
其中expr为节点的查询目标属性列表达式,*代表查找所有属性,[AS]c_alias为expr的别名,domainref为虚拟组域名,search_condition为SQL语言查询语句中的条件表达式。
本发明与现有技术相比具有以下有益效果:本发明的方法采用综合多倍的虚拟树型结构化网络和随机缓存的非结构网络来构建P2P覆盖网络,并以此为基础,采用类SQL语言查找相关的节点子集合,具有按复杂条件查询大规模网络环境下节点的优点,克服了集中式SIP应用的单点失败和通信瓶颈问题,同时克服了其他P2PSIP应用不能按复杂条件查询的缺点。
具体实施方式
相关术语:
节点:节点为参与多个虚拟分层组的计算机,它具有属性数据库Database(PDB)和路由表。
节点ID(PeerID):为层次式域名表示,例如:Alice@music.popular.Britney.
节点实体(PNE):节点实体指明节点ID(PeerID),IP地址等。
路由表:由许多节点实体组成。
网关角色:具有路由角色的节点担任几个不同层次的虚拟组的网关功能。
网关最上层(GUL):网关角色中最上层虚拟组在虚拟树中的位置。
虚拟组:由节点组成。上层虚拟组由具有网关角色的节点组成。
N倍虚拟组树:由虚拟组形成的树。高层虚拟组由低层具有网关角色的每组N个节点组成。重复此过程,以形成虚拟树。
加入消息:加入节点发送的消息,必须包括加入节点的实体信息。
离开消息:离开节点发送的消息,必须包括离开节点的实体信息。
查询消息:用户查询时发送的消息,必须包括类SQL语句。
参见图1,本发明是一种基于P2P的查找有关节点子集合的方法,包括按用户需求的主题领域建立网络领域分类的步骤、构建领域分类网络的步骤、基于领域分类网络查询节点子集合的步骤。
按用户需求的主题领域建立网络领域分类就是按用户的兴趣划分不同的领域,例如:将音乐分为流行音乐和经典音乐,
参见图2,领域分类网络是基于领域的P2P覆盖网络,具体构建步骤包括:
一、网络起始节点设置其路由表内容,并建立虚拟组,路由表内容主要包括节点实体信息,实体信息包含节点ID和IP地址,其中节点ID为用户名@域名,域名的格式与域名系统(DNS)的格式一致,域名由几级组成,各级之间由圆点“.”隔开,各级均是具有领域分类含义的文字及字符,虚拟组根据领域分类含义划分为分级的域,
二、节点加入P2P覆盖网络,节点根据分级的域加入领域的P2P覆盖网络,节点加入步骤具体如下:
a)节点A按领域确定要加入的虚拟组,并找到已加入此虚拟组的一个节点;
b)节点A向此节点发送包含节点A实体信息的加入消息,此节点向该虚拟组所有其他节点转发该加入消息;
c)虚拟组每个节点将节点A的实体信息增加到自己的路由表中,同时向节点A发送包含自身节点实体信息的确认消息,节点A将虚拟组每个节点的实体信息增加到自己的路由表中;
d)判断是否是根虚拟组或虚拟组中已有N个节点加入上层虚拟组,若判断结果是,则节点A加入步骤结束,若判断结果否,则找到上一层虚拟组的一个节点,并重复步骤b)~d)。
三、节点离开P2P覆盖网络,具体步骤如下:
2a)离开节点B寻找到自己加入的最顶层虚拟组的一个节点;
2b)离开节点B向此节点发送包含节点B实体信息的离开消息;此节点向虚拟组所有其他节点转发该离开消息;
2c)虚拟组每个节点从自己的路由表中将节点B实体信息删除,同时向离开节点B发送确认消息;
2d)判断是否是最底层虚拟组,若判断结果是,则节点B离开步骤结束,若判断结果否,则找到下一层虚拟组的一个节点,并重复步骤2b)~2d)。
四、查询节点子集合的步骤具体如下:
3a)用户根据要查询的领域,用类SQL语言编写查询语句;
3b)用户节点将查询语句解析为目标节点的目标虚拟组域名,和本地SQL语句,并将其放入查询消息中;
3c)用户节点通过查找其路由表,转发查询消息到更接近目标虚拟组域名的邻近节点;
3d)邻近的节点通过查找其路由表,转发查询消息到更接近目标虚拟组域名的节点;
3e)判断是否是目标虚拟组,若判断结果是,则执行下一步骤,若判断结果否,则重复步骤3d)~3e);
3f)目标虚拟组一节点C对目标虚拟组的所有节点广播查询消息;
3g)目标虚拟组所有节点利用本地SQL语句,查找符合查询条件的信息,并将查找结果返回给查询消息广播节点C,查询消息广播节点C整合查找结果,并发送到用户节点。
用类SQL语言编写的查询语句为:
SELECT{*|expr[[AS]c_alias]{,expr[[AS]c_alias]...}}FROMdomainref[WHERE search_condition];
其中expr为节点的查询的目标属性列表达式,例如peerID(节点属性,意义为节点ID)、AVG(musictime)(在线每次欣赏音乐的平均时间,musictime为节点属性,意义为每次欣赏音乐的时间,AVG为平均函数),*代表查找节点的所有属性,例如,若节点属性包括peerID、IP(IP地址)、Types(类型)等属性,结果应同时包括peerID、IP、Types等属性列,[AS]c_alias为expr的别名,例如:peerID as节点ID,IP as IP地址,Types as节点类型等,domainref为虚拟组域名,例如:Brittany.popular.music,search_condition为SQL语言查询语句中的条件表达式,例如:types=’fan’AND sex=’female’AND age<40;,类SQL语言的查询语句与SQL语言不同在于SQL语言中的FROM后面table改为domainref。
例如:
查找所有的布莱特妮的粉丝的节点ID,IP地址,其虚拟组域名:Brittany.popular.music;
其类SQL语言的查询语句为:
SELECT PeerID,IP FROM Brittany.popular.music where types=″fan″;
查找布莱特妮虚拟组中的Alice的在线每次欣赏音乐的平均时间:
其类SQL语言的查询语句为:
SELECT AVG(musictime)FROM Brittany.popular.music WHEREPeerID=’Alice@Brittany.popular.music’;
查找所有的布莱特妮的年龄小于40岁的女性粉丝的所有属性:
其类SQL语言的查询语句为:
SELECT*FROM Brittany.popular.music WHERE types=’fan’AND sex=’female’AND age<40;
下面以实例详细说明构建领域分类网络和查询节点子集合的过程:
实施例1
构建全球音乐网络:
按用户需求的主题领域建立网络领域分类,例如:将音乐分为流行音乐和经典音乐。域名格式为:音乐家.音乐类别.音乐。如:LiuHuan.Popular.Music或刘欢.流行音乐.音乐。
构建领域分类网络,歌唱家,音乐相关公司,经纪人,消费者,粉丝等加入相关虚拟组。所有用户计算机作为节点按用户域名建立领域的覆盖网络。节点ID为用户名@域名,如:小李@刘欢.流行音乐.音乐。
假设有用户:小李为刘欢的粉丝,其节点ID为小李@刘欢.流行音乐.音乐。所用的电脑IP地址为10.20.2.26;
老王为刘欢的经纪人,其节点ID为老王@刘欢.流行音乐.音乐。所用的电脑IP地址为10.88.5.15;
老张为贝多芬的经纪人,其节点ID为老张@贝多芬.经典音乐.音乐。所用的电脑IP地址为200.10.121.150;
小赵为布莱特妮的消费者,其节点ID为小赵@布莱特妮.流行音乐.音乐。所用的电脑IP地址为150.100.69.112;
未来音像公司为刘欢音乐产品公司,其节点ID为未来音像公司@刘欢.流行音乐.音乐。所用的电脑IP地址为26.109.12.123;
假设老王为建立网络的第一人。按图2,老王电脑为网络起始节点,设置其路由表内容为其节点实体(节点ID:老王@刘欢.流行音乐.音乐,IP地址:10.88.5.15);建立刘欢虚拟组,上层的流行音乐虚拟组和音乐根虚拟组。
小李加入网络。小李按领域确定要加入的虚拟组为刘欢.流行音乐.音乐,并找到已加入刘欢虚拟组的一个节点老王。小李节点向老王节点发送包含小李实体信息(节点ID:小李@刘欢.流行音乐.音乐,IP地址10.20.2.26)的加入消息;老王节点向刘欢虚拟组所有其他节点转发该加入消息(因此时只有老王本身一个节点,故不转发);刘欢虚拟组每个节点(此时只有老王一个节点)将小李节点的实体信息(节点ID:小李@刘欢.流行音乐.音乐,IP地址:10.20.2.26)增加到自己的路由表中,同时向小李节点发送确认消息。小李节点将虚拟组每个节点实体信息(节点ID:老王@刘欢.流行音乐.音乐,IP地址:10.88.5.15)增加到自己的路由表中。假设N为1,因已有1个节点加入上层虚拟组(老王节点),节点加入结束。
老张加入网络。老张按领域确定要加入的虚拟组为贝多芬.经典音乐.音乐,此时网络还不存在贝多芬虚拟组和上层经典音乐虚拟组;所以找到最相近的音乐虚拟组的一个节点老王。老张节点向老王节点发送加入消息(包含老张的实体信息);老王节点向音乐虚拟组所有其他节点转发加入消息(因此时只有一个节点,故不转发);音乐组每个节点(老王)将老张节点的实体信息(节点ID:老张@贝多芬.经典音乐.音乐,IP地址:200.10.121.150)增加到自己的路由表中,同时向老张节点发送确认消息(包含自身的节点信息,在此时只有老王一个节点信息)。老张节点将虚拟组每个节点实体信息(节点ID:老王@刘欢.流行音乐.音乐,IP地址:10.88.5.15)增加到自己的路由表中。并建立下层贝多芬和.经典音乐虚拟组,节点加入结束。
小赵加入网络。小赵按领域确定要加入的虚拟组为布莱特妮.流行音乐.音乐,此时网络还不存在布莱特妮虚拟组;所以找到最相近的流行音乐虚拟组的一个节点老王。小赵节点向老王节点发送加入消息(包含小赵的实体信息);老王节点向流行音乐虚拟组所有其他节点转发加入消息(因此时只有一个节点,故不转发);音乐组每个节点(老王)将小赵节点的实体信息(节点ID:小赵@布莱特妮.流行音乐.音乐,IP地址:150.100.69.112)增加到自己的路由表中,同时向小赵节点发送确认消息。小赵节点将虚拟组每个节点实体信息(节点ID:老王@刘欢.流行音乐.音乐,IP地址:10.88.5.15)增加到自己的路由表中。并建立下层布莱特妮虚拟组,假设N为1,结束。
未来音像公司加入网络。未来音像公司按领域确定要加入的虚拟组为刘欢.流行音乐.音乐,并找到已加入刘欢虚拟组的一个节点小李。未来音像公司向小李节点发送加入消息(包含未来音像公司的实体信息);小李节点向刘欢虚拟组所有其他节点转发加入消息(此时向老王节点转发);虚拟刘欢组每个节点(小李和老王)将未来音像公司节点的实体信息(节点ID:未来音像公司@刘欢.流行音乐.音乐,IP地址:26.109.12.123)增加到自己的路由表中,同时向未来音像公司节点发送确认消息。未来音像公司节点将虚拟组每个节点实体信息(节点ID:老王@刘欢.流行音乐.音乐,IP地址:10.88.5.15和小李@刘欢.流行音乐.音乐,IP地址:10.20.2.26)增加到自己的路由表中。假设N为1,结束。
小赵离开网络。A)小赵节点寻找到自己加入的最顶层虚拟组(此时为流行音乐)的一个节点(老王)。小赵节点向此(老王)节点发送离开消息(包含小赵的实体信息);B)此节点向虚拟组所有其他节点转发离开消息(此时,无其他节点,故不转发)。C)虚拟组每个节点(老王)从自己的路由表中将离开节点小赵实体信息(节点ID:为小赵@布莱特妮.流行音乐.音乐,IP地址:150.100.69.112)删除,同时向离开节点小赵发送确认消息。由于不是最底层虚拟组,虚拟组指向下层虚拟组布莱特妮,转向步骤B),循环一次后,是最底层虚拟组,结束。
查询节点子集合:
查询示例:老张为贝多芬的经纪人,但目前对刘欢感兴趣。想查找所有刘欢的粉丝的所有属性。按图3,老张根据要查询的主题,用类SQL语言编写查询语句。Select*from刘欢.流行音乐.音乐wheretype=“粉丝”;老张节点将查询语句解析为目标节点的虚拟组域名刘欢.流行音乐.音乐,和本地SQL语句,select*from PDBTablewhere type=“粉丝”;并将其放入查询消息中。老张节点通过查找其路由表,转发查询消息到更接近目标虚拟组域名的邻近节点老王。此时,老王就是目标虚拟组刘欢的一个节点。老王节点对目标虚拟组所有节点(包括小李和未来音像公司)广播查询消息。目标虚拟组所有节点(包括老王、小李和未来音像公司)利用本地SQL语句,查找符合的信息,(在此,只有小李的属性数据库PDBTable中的类型为粉丝),并将结果返回给老王节点。老王节点整合结果,并发送到老张节点。
实施例2
构建全球医疗咨询网络:
将疾病分类,建立相关的域名。医生、病人、医院、药品生产和销售公司、医疗设备生产和销售公司等加入相关虚拟组。所有用户计算机按用户域名建立领域的覆盖网络。节点加入和离开覆盖网络的步骤依照实施例1所示。
查询示例:查找所有治疗偏头痛的中医医生的所有属性,其虚拟组域名:ChineseMedicalDoctor.Doctor;
类SQL语言的查询语句为:
Select*from ChineseMedicalDoctor.Doctor.Medical whereexpert=“偏头痛”;
实施例3
构建全球电子商务网络:
将电子商务业务进行分类。商务提供者、消费者等加入相关虚拟组。所有用户计算机按用户域名建立领域的覆盖网络。节点加入和离开覆盖网络的步骤依照实施例1所示。
查询示例:查找杭州所有的三星级宾馆的所有属性。其虚拟组域名:Zhejiang.China.Hotel.eComence;
类SQL语言的查询语句为:
Select*from Zhejiang.China.Hotel.eComence where place=“Hangzhou”and quality=“3star”;
实施例4
构建全球新媒体网络:
将媒体进行分类。媒体提供者、消费者等加入相关虚拟组。所有用户计算机按用户域名建立领域的覆盖网络。节点加入和离开覆盖网络的步骤依照实施例1所示。
查询示例:查找所有的关于北京奥运会相关新闻的作者的所有属性。其虚拟组域名:sports.newMedia;
类SQL语言的查询语句为:
Select*from sports.newMedia where topic=“BeijingOlympic”and type=“arthor”;
实施例5
构建全球多媒体网络:
将多媒体进行分类。多媒体提供者、消费者等加入相关虚拟组,所有用户计算机按用户域名建立领域的覆盖网络。节点加入和离开覆盖网络的步骤依照实施例1所示。
查询示例:查找所有对中央10台感兴趣的观众的所有属性。其虚拟组域名:TV.multiMedia;
类SQL语言的查询语句为:
SELECT*FROM TV.multiMedia where types=″fan″andTVchannel=“CCTV10”;
实施例6
构建全球即时消息网络:
将用户进行分类。所有用户计算机按用户域名建立领域的覆盖网络。用户间直接进行查找与连接。节点加入和离开覆盖网络的步骤依照实施例1所示。
查询示例:查找所有年龄在20到30岁,地点在杭州的用户的所有属性。其虚拟组域名:Zhejiang.IM;
类SQL语言的查询语句为:
SELECT*FROM Zhejiang.IM where place=″Hangzhou″andage between 20 and 30;
实施例7
构建全球IP电话网络。
将用户进行分类。所有用户计算机按用户域名建立领域的覆盖网络。用户间直接进行查找与连接。节点加入和离开覆盖网络的步骤依照实施例1所示。
查询示例:查找在NewYork的alice电话的所有属性。其虚拟组域名:USA.IPPhone;
类SQL语言的查询语句为:
SELECT*FROM USA.IPPhone where user=“alice”place=″NewYork″。