发明内容
针对上述匹配算法的时间效率低、空间复杂度高及维护复杂的问题。本发明提供了一种空间复杂度低,时间复杂度低的大规模发布订阅系统的语义匹配算法。
一种大规模发布订阅系统的语义匹配算法,包括如下步骤:
1)为订阅图建立索引;
2)转化事件到特定的数据结构;
3)把事件图的数据结构提交给事件匹配器;
4)事件匹配器进行事件图同订阅图模式的匹配运算,找出匹配的订阅,由系统把事件分发给匹配的订阅者,
其中,所述步骤1)为节点以订阅总图的方式保存订阅,每个订阅要被合并到订阅总图中,过滤不相关的订阅条件,同时维护订阅的插入和删除;
所述步骤2)为直接从事件的原始格式生成事件的数据结构,或先把事件的原始格式转换成RDF事件图的结构,然后对图进行深度或宽度优先搜索遍历来生成事件的数据结构;
所述步骤4)中事件图同订阅图模式的匹配运算为三个阶段:第一个阶段根据订阅索引结构过滤不相关的订阅;第二个阶段根据匹配服务器内核体系结构设置并行方案;第三阶段对过滤后的订阅进行匹配,以发现匹配成功的订阅。
进一步的,所述RDF事件图有三类节点:空节点、类型节点和文本节点。
进一步的,所述步骤2)中所述特定的数据结构由包含由属性和节点对名的PartA和表示资源节点的类型Part B两部分组成。
本发明的有益效果为:降低事件与订阅匹配的时间,提高事件匹配效率,使得随着订阅和发布事件数目的增加,事件匹配效率不会受到严重的影响,系 统性能不会恶化。同时,根据匹配服务器的内核体系结构自适应调整匹配算法,充分利用多核技术提高匹配效率。
具体本发明具有以下优点:首先,空间复杂度低。节点的空间资源主要消耗在单个订阅图和合并订阅图的存储上。假定单个订阅图的总数为n,图索引结构中的节点对数目为k,则所有单个订阅图的空间复杂度为0(n*k)。假定合并订阅图中的结点对数目为l,每个结点对所连接的订阅列表的平均长度为m,则合并订阅图的空间复杂度为0(l+l*m)。因此总体空间复杂度为0(n*k+l+l*m)。考虑到当插入订阅S到合并订阅图时,要么把S的结点对名(NPN)加入合并订阅图,然后再把S加入到订阅列表,或者在NPN已经存在的情况下,直接把S加入到订阅列表中,因此n*k是小于等于l*m的。而l*m的大小取决与订阅之间的重叠率。重叠率越高,l*m就越小并趋近于n*k。当重叠率为零时,即任意两个订阅图之间没有同样的连接,l*m=2n*k。而k远远小于n,因此总体空间复杂度可表示为0(n),说明内存的消耗基本上同订阅的个数成线性关系。其次,时间复杂度低。订阅插入算法的时间复杂度为0(k),只简单依赖于订阅S的结点对数目。事件转换算法的时间复杂度也只取决于事件的三元组个数,假定三元组的个数为t,即时间复杂度为0(t)。匹配算法的时间开销主要是结点对匹配。假设i是事件数据结构中属性映射表的大小同每个属性相关的结点对的平均个数的乘积,j是合并订阅图中每个属性下面的平均结点对数目,则时间复杂度是0(i*j*m)。同时考虑到利用多核体系结构,消耗时间将会更低。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,以下举实例对本发明进一步详细说明。
在本系统中,发布者发布以RDF/XML语法表示的事件后,系统把事件转化为RDF图的数据结构。本发明的RDF事件图有三类节点:空节点、类型节点和文本节点。图2展示了一个RDF事件图,它们的具体实现如下描述:
空节点没有URI引用或者不需要URI引用,只是作为RDF事件图中的“过渡”节点。空节点在RDF事件图中很常见,因为很多资源可以使用丰富的属性来说明,因此不需要URI引用;同时很多资源本身可能没有URI引用。当RDF事件图表示为三元组时,空节点的表示使用“_:name”形式的标识符,其中name是由系统任意产生的能唯一标识一个空节点的名字。把RDF事件图序列化成XML格式时,使用rdf:nodeID属性来引用空节点,其属性值也为系统任意产生的能唯一标志一个空节点的标识符,但不必以“_:”开头。空节点标识符仅仅是在把RDF图表示成三元组或者RDF/XML的时候,用来表示和区分RDF图中的空节点。
类型节点至少有一个rdf:type属性声明它是某个特定类型或类的实例。允许一个类型节点有多个rdf:type属性,说明该类型节点同时是多个类的实例。把RDF事件图表示为XML格式时,RDF/XML提供了一种特殊的简略形式以描述这些类型节点。在简略形式中,rdf:type属性及其值被移去,而节点对应的rdf:Description元素被替换为一个QName(Qualified Name)元素。一个QName包括一个代表命名空间的前缀,其后是一个冒号,然后是该命名空间内的一个词汇名(或者称为局部名)。
文本节点,包括普通文本节点和类型文本节点。例如,以“notebook”和“new”为标签的节点是普通文本节点,其隐含的类型为字符串,说明一个拍卖项的物品名称为笔记本,其质量较新。以“2008-2-29^^xsd:date”为标签的节 点是类型文本节点,其中上标符号“^^”指出文本的类型为日期型。
由于系统把事件表示为RDF图,所以订阅被描述为创建在RDF图语法之上的有向图模式(directed graph patterns),图模式规定了RDF事件图的形状以及对某些节点和弧的约束。订阅图模式如图3所示,订阅图中除了rdf:type属性以外,所有其他的属性均以″pi″代替。每个空节点被分配一个独一无二的标识符,形如″_:gnID_i″。URI引用和文本分别被表示为″URIref_i″和″Literal_i″。所有的i都满足i≥1。每个变量节点的标签均以″*″打头,表示这个节点是个变量,其后紧跟变量名″?i″。在系统中,规定变量名必须以″?″为前缀,其后为字符串。字符串由数字、下划线和英文字母组成,不允许出现其他字符。用户在作订阅条件时,可以按照上述规则给变量取任意的名字。每个变量资源节点都有一个rdf:type属性指出变量所要满足的类型。文本节点在其变量名之后跟随变量约束的布尔表达式。
发布订阅通知服务首先为订阅图建立了索引。节点以订阅总图的方式保存订阅,每个订阅要被合并到订阅总图中,从而过滤不相关的订阅条件。同时维护订阅的插入和删除。订阅图合并的特点是充分利用大规模发布订阅系统订阅的重复性,减少匹配次数。
系统采用了RDF/XML格式表示事件,它既可以直接从事件的原始格式生成事件的数据结构,也可以先把它转换成RDF图的结构,然后对图进行深度(或宽度)优先搜索遍历来生成事件的数据结构。由于事件的交换格式是RDF/XML,因此首先要把事件转换成相应的数据结构。当RDF事件图的数据结构创建好后,把它提交给事件匹配器。事件匹配器进行事件图同订阅图模式的匹配运算,找出匹配的订阅,然后由系统把事件分发给匹配的订阅者。
图模式匹配过程包括:
1.为订阅图建立索引,并不断合并订阅图,以维持一个没有冗余信息的订阅总图。
2.当事件到达时,把事件转化为适合匹配的特定数据结构。
3.在订阅和事件都已建立特定数据结构后,根据三元组成功匹配的数量,并利用多核体系结构,进行具体匹配运算。
本发明在匹配订阅计算中,充分利用了多核体系结构。发布订阅通知服务在获取内核体系结构信息后,自适应调节匹配算法,达到并行匹配计算的目的。
本发明构建在语义Web上,利用RDF图和多核技术实现发布订阅系统匹配的可靠性和快速性。
这种图模式匹配过程描述如下:
首先,为订阅图建立索引。节点以订阅总图的方式保存订阅,每个订阅要被合并到订阅总图中,订阅总图称为合并订阅图(merged subscriptionsgraph)。为合并订阅图建立索引以过滤不相关的订阅条件。订阅图的索引结构的数据结构由三部分组成:
VT:具有两列的变量绑定表,字段名为订阅中的变量名、URI引用或者文本;
HMNPN:节点对哈希表(hash map),映射结点对名NPN(node pair name)到VTs对象,其中NPN是两个节点标签的连接字符串,主体节点标签在前,客体节点标签在后,中间以连字符“-”隔开,VTs是包含至少一个变量表VT的对象。注意,对于变量节点,只取标签中的“*”号生成NPN。
HMProp:属性哈希表,映射属性名到HMNPN,属性名为属性的URIref。
当订阅到达时,根据上述三元组生成索引结构。接着,这个订阅被插入到合并订阅图中。订阅图及其合并订阅图数据结构如图4、图5所示。对于到达订阅图中的每个属性P,首先根据属性P的名字从合并订阅图的属性映射表HMProp中得到结点对哈希表HMNPN。如果HMNPN为空,说明属性P是第一次出现在合并订阅图中,因此创建一个新的HMNPN,把(P,HMNPN)放入合并订阅图的HMProp中。接着对到达订阅图中该属性P下的每个结点对名NPN,根据NPN从HMNPN属性映射表中得到对象SC。如果SC为空,同样创建一个新的SC对象,并把(NPN,SC)放入HMNPN映射表。SC有两个重要的字段:变量绑定表BT (variable bindings table)和订阅列表SL。然后从SC中得到订阅列表SL,如果SL不包含订阅S,则把SC中的变量绑定表BT的引用赋值给对应的VTs中的BT,并把订阅S加入订阅列表SL。
然后,转化事件到特定的数据结构。把以RDF/XML格式表示的事件(或者RDF事件图)转化为适合匹配的特定数据结构。事件的数据结构由Part A和PartB两部分组成。图6显示了事件图的数据结构。
Part A包含属性和节点对名,对应于三元组或者“节点-弧-节点”的连接。Part A的结构与订阅的索引结构相似,也包含属性映射表HMProp,但映射值是节点对名向量集VCNPN,向量集中可能包含多个节点对名。事件数据结构中的结点对名NPN必须和订阅数据结构中的NPN结构一致,即它是两个节点标签的连接字符串,主体节点标签在前,客体节点标签在后,中间以连字符“-”隔开。注意,HMProp中的属性不包括rdf:type属性。
Part B表示资源节点的类型,对应于包含rdf:type属性的三元组。Part B是一个资源节点的类型映射表HMResourceType,其键为资源节点的标签,值为包含资源节点类型(类)URI引用列表URIList。使用URI引用列表的原因是一个资源节点可能具有多个类型。
系统采用了RDF/XML格式表示事件,它既可以直接从事件的原始格式生成事件的数据结构,也可以先把它转换成RDF图的结构,然后对图进行深度(或宽度)优先搜索遍历来生成事件的数据结构。本专利对事件的转换是先从RDF/XML文档中读入事件并转化为RDF图模型RDFModel,然后从RDFModel中得到声明列表StmtList。接着对StmtList中的每个声明Stmt,分别获取它们的主体Subject、属性Property和客体Object做以下处理:如果Property是“rdf:type”,说明这是一个类型声明,则根据Subject从事件数据结构的资源类型映射表HMResourceType中得到URI引用列表URIList。对为空的URIList做处理后,把代表资源节点类型的URI引用Object加入URIList;如果Property不是“rdf:type”,则根据概念模型中的属性关系计算出Property的等价属性 和祖先属性,并把Property、等价属性和祖先属性一同加入属性集Props。然后对Props中的每个属性Prop,根据Prop从事件数据结构的属性映射表HMProp中得到结点对名向量集合VCNPN。对为空的VCNPN做处理后,把由Subject和Object连接而成的结点对名加入VCNPN,从而完成事件的转换。
最后根据事件图的数据结构,从合并订阅图的索引中找到相关的订阅条件进行匹配,发现所有过滤条件被满足的订阅。事件匹配算法分为三个阶段:第一个阶段根据订阅索引结构过滤不相关的订阅;第二个阶段根据匹配服务器内核体系结构设置并行方案;第三阶段对过滤后的订阅进行匹配,以发现匹配成功的订阅。
在匹配的第一个阶段,对事件图的每个属性P,根据P从合并订阅图的属性映射表HMProp中得到结点对名映射表HMNPN。如果HMNPN不为空,从事件图的属性映射表HMProp中得到结点对名向量集合VCNPN,并把VCNPN中的每个NPN同HMNPN中的NPN进行比较。如果HMNPN的NPN匹配VCNPN的NPN,则从HMNPN中得到相应的订阅集合对象SCs。对SCs中的每个对象SC,把事件图中的节点标识符追加到其变量绑定表中。接着对SC的订阅列表SL中的每个订阅S做处理:先增加S的计数器Counter,然后把S加入到订阅集合SubSet中。订阅计数器Counter的增加量是对应结点对名下的变量表数目。订阅集合SubSet中的每个订阅至少有一个三元组在这个阶段的匹配中被覆盖到。在比较订阅的节点标识符是否与事件的节点标识符匹配时,如果订阅中的节点标识符是“*”号,则它与事件的任意节点标识符匹配,如果订阅的节点标识符是URI引用或者文本,则事件的节点标识符必须是相同的URI引用或者文本才能匹配。对订阅集合SubSet中的每个订阅S,检查S的计数器值是否大于等于订阅S的三元组个数。如果计数器值小于三元组的个数,说明订阅S中至少存在一个三元组没有被匹配,订阅必然不与该事件匹配,不必继续检查订阅的约束是否被满足,订阅过滤成功。
在匹配的第二阶段,根据内核体系结构动态地决定并行度,以及进行匹配 任务分割。当内核数量只有一个时,匹配从订阅索引结构的头部开始。否则,根据内核数量PRCNum决定任务分割,可以分为两种情况:情况一是PRCNum为奇数,把订阅索引结构长度IndexLT分成PRCNum部分,每个内核从分割索引结构的起始部分开始执行比较,直到该部分比较完成;情况二是PRCNum为偶数,把订阅索引结构长度IndexLT分成PRCNum/2部分,每个分割索引结构的起始部分和结尾部分都有一个内核负责执行,直到前后方向执行的内核任务相遇。
在匹配的第三阶段,按照第二阶段所述的并行策略进行比较。每个订阅都有一个匹配成功计数器CounterSec,初始值为0。当成功进行一组属性匹配时,该订阅对应的CounterSec值加1。最后比较匹配成功计数器CounterSec和第一阶段中的计数器Counter,如果相等,说明事件符合订阅条件;否则,一定有属性未满足订阅条件。