一种基于位图的布尔表达式存储、匹配方法和系统与流程

文档序号:12158074阅读:210来源:国知局
本发明旨在设计利用位图形式存储及查询与(&)的布尔表达式,属于信息过滤、信息检索、计算生物学等领域,涉及到一种基于位图的布尔表达式存储、匹配方法和系统。
背景技术
:随着网络数据每秒数以百兆字节甚至数千兆字节的增多,安全系统,如病毒检测系统、入侵检测系统、网络数据包深层检测系统、垃圾邮件过滤系统、垃圾短信过滤系统等,要求更准确、更快速地对海量信息进行分析过滤。面对急剧膨胀的网络信息量和日趋复杂的网络环境,传统方法中,直接使用经典串匹配算法对规则进行匹配,并采用简单关键词来描述规则的方法,已经无法满足需求。因此,设计更加简单高效快速的匹配方法和系统,对处理安全系统中更加复杂的规则,具有重要的理论和实际意义。经实验验证,本发明提出的基于位图的布尔表达式匹配方法是一种很好的解决方法。目前具有代表性的布尔表达式匹配算法包括RE-Tree模型、决策树模型、有向无环控制流图模型、计数算法、最长过滤算法、BE-Tree模型等。文献(Chee-YongChan,MinosGaroMalakis,RajeevRastogi,RE-Tree:AnEMMicientIndexStructureMorRegularExpressions[C].Proceedingsonthe28thVLDBConMerence,HongKong,China,2002)提出RE-Tree模型来计算复杂的正则表达式问题。RE-Tree模型主要目的是用来处理任意复杂的表达式问题,当把其用在相对简单的布尔表达式问题上时,并不能达到很好的效果,而且空间需求很大。文献(AlokSTongaonkar.Mastpattern-matchingtechniquesMorpacketMiltering[D].NewYork:StonyBrookUniversity,2004)提出的决策树模型用在数据包过滤系统中,对数据包各个属性条件进行快速检测,包括原目的IP和端口等。在属性数目确定的情况下,可以达到较好的效果。该模型面临的问题是不确定性,在复杂布尔表达式下,决策树可能不是一个确定性自动机。由于这种树形结构,算法的空间局部性会降低,也会进一步影响算法性能。文献(李安怀,荆继武.网络安全系统中的快速规则匹配[C].计算机工程与设计.Vol.28,No.6,pages1269-1272,Mar2007)提出了有向无环控制流图(CMG)模型,每个图节点代表一个布尔变量,每个节点有两个转移边,分别在该布尔变量取值为真为假时进行转移。如果一个节点布尔变量经过计算后取真值,则沿着真值转移走,如果经过计算取假值则沿着假值转移走。如果最终走到true节点,则代表命中了一个表达式。有向无环控制流图的匹配过程相当于遍历图的过程。有向无环图模型与决策树模型面临着同样的问题——不确定性。算法的实现较为复杂,执行时,算法会遍历一些根本用不到的节点,实际效率并不比其它算法有优势。文献(曹京,谭建龙,刘萍,郭莉.布尔表达式匹配问题研究.计算机应用研究[C].Vol24,No.9,pages70-72,2007-9)提出了计数算法及其改进算法最长过滤算法。算法基本思想是由每个表达式中最长关键字为索引来建立一种查询结构。该算法认为较长关键字在文本中出现的频率较低,而较短的关键字在文本中出现的概率较高。通过以最长关键字索引相应表达式可以有效减少遍历表达式的次数,从而减少遍历的表达式的数目。在上述过程中,存在问题是同样以扫描两次文本为代价。在简单布尔表达式匹配问题上,最长过滤算法具有很高的效率,但是在这种复杂布尔表达式匹配问题上,该算法必须先把布尔表达式分解为多个简单布尔表达式,从而面临表达式的组合爆炸的挑战,进而消耗大量的内存。对于一些特定表达式,将会带来存储空间成倍上涨的代价。文献(MohammadSadoghi,Hans-ArnoJacobsen.BE-Tree:AnIndexStructuretoEMMicientlyMatchBooleanExpressionsoverHigh-dimensionalDiscreteSpace[C].SIGMOD’11,June12–16,2011)根据Re-Tree提出了一个相对简单的BE-Tree模型。并由此提出了一个区间编码方法。算法首先对表达式集合建立一棵表达式树,之后对每个节点分配一个区间范围。表达式中的关键字为树中的叶子节点,逻辑关系为树中的内节点。树中深度为偶数的内节点为AND节点,深度为奇数的内节点为OR节点。算法首先找到文本命中的所有关键字,之后根据关键字找到其对应的覆盖区间。根据关键字的区间覆盖一个长度为树中节点数目的向量。当匹配到的关键字的某个子集的区间能够不相交的覆盖整个区间时,就代表一个表达式命中。但是,基于表达式树的算法把布尔表达式匹配问题转换成一个区间覆盖问题,在实际上效果更加依赖于如何构建表达式树。当前,暂没有文献描述如何构建一棵高效的布尔表达式树。在上述布尔表达式匹配技术中,存在问题主要在于对于每个关键字,都必须遍历其所在的所有表达式。本发明要解决的首要问题是,如何减少匹配过程中需遍历的表达式的次数,以提高布尔表达式匹配的效率。技术实现要素:针对现有技术中存在的技术问题,本发明的目的在于提供一种基于位图的布尔表达式存储、匹配方法和系统。本发明可以将布尔表达式(仅针对与表达式,下同)利用位图结构进行存储,并对文本项可一次查询就可将相对应的布尔表达式命中。所谓位图技术,即bitmap,用一个比特位来标记某个元素对应的值,采用比特为单位存储数据,可大大节省存储空间。本发明可以扩展至多线程模式,以加速文本的匹配速度,其系统的结构图如图1:为简述方便,下面描述该系统的算法过程中仅针对单线程模型,并定义如下符号:idk:代表第k个布尔表达式。tk:代表布尔表达式的一个子项。其中k1<k2时,tk1<tk2。poskj:代表位置信息,第k个布尔表达式idk的第j个子项的位置。其中poskj=j(j=0,1…31)。item_id[]:代表子项值表。item_message[]:代表子项信息表,存储各子项所存在的布尔表达式序号及位置信息。item_count[]:代表子项顺序表,表示子项值小于tk的所有子项信息表的个数。例如,子项值表中第n个子项值为子项tk,即item_id[n]=tk,子项tk-1的子项顺序表的值v1=item_count[n-1],子项tk的子项顺序表的值v2=item_count[n],则item_message[v1]~item_message[v2]表示子项值tk的子项信息,包括所有包含该子项tk的规则的规则序号及相应的位置信息。bool_item_num[idk]:代表布尔子项数目表中第k个布尔表达式idk包含的子项数目。index[]:代表索引信息表,快速定位文本项在item_id[]的范围,便于后续匹配。bitmap[idx]:代表匹配位图表,idk的匹配情况。A:代表存储布尔表达式序号及位置信息中的序号左移位数。若左移A位,即idk<<A,则每个布尔表达式最多存储的子项数为2A,则下文公式idk<<5+poskj中的poskj≤2A。B:代表做与运算时参照的参数,B=2A-1,即每个布尔表达式最多存储的子项数2A-1。下面介绍存储及搜索阶段中A=5,B=31。主要思想:存储阶段:针对多个布尔表达式的各个子项,对其相应的布尔表达式序号和所在位置进行存储,并按照子项值的大小顺序排序,同时记录每个布尔表达式子项的数目。对子项值建立索引index,便于文本项快速定位子项值的位置。搜索阶段:待查询的文本项先在索引index中二分搜索,以确定其在子项存储中的位置,然后查找该位置下子项所对应的布尔表达式序号和位置信息。开辟数组位向量bitmap用来存储每个布尔表达式的匹配情况,将每个能匹配的布尔表达式(序号为k)所对应的位置(j)置为1(bitmap[k]=1<<j),同时查看该布尔表达式中的bitmap中1的个数是否与其子项数目一致,若一致,则输出匹配的布尔表达式的序号,并将bitmap[k]置为-1防止重复匹配该布尔表达式,否则,则继续匹配下一文本项,直至文本结束。为详细描述本发明的内容,本节先介绍基于位图的布尔表达式匹配方法及系统的几大部件和流程过程,随后介绍具体的存储布尔表达式规则和查询文本的主要过程。本发明中,构建哈希表及其访问系统主要包含以下部件,如图2所示:1)系统预处理部件:设定最大线程数,输入多个布尔表达式规则,并记录规则个数。2)存储子项部件:依据多个规则存储子项值表、子项信息表、子项顺序表和布尔子项数目表。3)构建索引部件:依据子项值表,先设定参数θ,再依据参数建立索引表。4)访问信息部件:根据所要查询的文本值,依据索引确定在子项值表的位置,判断子项值表是否存在该元素,若存在,则存储对应的子项信息表,否则,继续查询下一文本值。5)返回信息部件:开辟数组位向量bitmap用于最终校验布尔表达式的匹配结果。根据上一步所得的子项信息表,确定规则的序号和位置,在bitmap中的相应序号的位置置为1,若最终bitmap中1的个数与该规则所对应的子项个数一致,返回该规则序号,匹配成功。以上介绍了基于位图的布尔表达式匹配方法及系统的各部件,为了便于理解其存储布尔表达式规则和搜索文本的过程,所以针对这两个过程简述其基于位图的布尔表达式匹配方法及系统的具体步骤。表1多个布尔表达式规则存储布尔表达式规则具体步骤:1)输入布尔表达式规则及序号,并限定布尔表达式规则子项个数不超过32(2A,A=5)个。如表1所示;2)利用STL中的map实现<key,value>存储,其中key为子项值tk,value为子项所对应的布尔表达式规则及其位置,利用idk<<5+poskj(A=5)来表示,同时存储每个子项值所对应的value个数,利用ik表示,并记录各布尔表达式规则子项的数目,用bool_item_num[idk]表记录,如图3所示。3)将上一步已经升序排列的<key,value>对子项信息存储到一维数组item_message[]中,在item_message[]中tk'指代图3中tk的value信息,其中tk'=tk-t1。构建item_count[]表和item_id[]表,item_count[]表用来限定子项tk对应的value值在item_message[]中的下标范围,item_id[]表存储已经升序排列的子项的值,如图4所示。4)确定参数θ,构建索引index[]表,index[]初始值可以确定0~65536差值内的子项值item_id[]的位置。当interval=tlast-t1>65536时,index[j]就不表示子项j(j≤tlast)在item_id[]中的位置了,这时就需要先确定θ的值然后再构建索引表。其中,tlast表示item_id[]中最后一个子项值,t1表示item_id[]中第一个子项值。θ的确定方法:θ=0interval=tlast-t1while((1<<(θ+16))<interval)θ++上述θ的确定方法用自然语言描述如下:(1)初始化的θ值,令θ=0,计算internal,internal=tlast-t1。(2)将1左移θ位,判断其值是否小于internal,若小于internal,将θ加1,循环(2)步骤;若大于或等于internal,跳出循环,得到θ最终值。如图5所示,设tj'=j-1,令n=65538,则interval=65537>(1<<16),最终确定θ=1。则index[j]~index[j+1]表示下标为1<<(j+θ)-2~1<<(j+θ)-1范围内的item_id[]的位置。总体来说,index[]表的目的是一个类似的二分哈希表,使得文本项缩小查找范围,能快速定位在子项值item_id[]的位置,以便于后面的查询过程。搜索文本的具体步骤:1)输入各项文本值,在index[]表确定其在item_id[]表的范围,利用二分查找的方法确定文本值是否在item_id[]表中,若在表内,保存相应的item_message[]信息,若不在,继续匹配下一个文本项。文本项只包括图6所示5个值,布尔表达式规则符合存储布尔表达式规则具体步骤4)所列的假设条件,下面以文本项t=t4为例,介绍本步中的匹配过程。首先需要将文本项减去最小规则子项的值,由前述可知min=t1,则t'=t-min,然后根据参数θ=1,确定index[]表下标,下标h=t'>>θ,由于t'=t4'=3,则h=1,则在范围index[1]~(index[2]-1)(2~3)的item_id[]下标中寻找是否与item_id[]的值匹配,最终确定t'=item_id[3],确定item_id[]下标为3,则需要在item_message[]的item_count[3]~item_count[4]范围内存储子项信息。其他文本项也按照上述所示,若在item_id[]与规则子项值匹配,存储相对应的子项信息。2)开辟内存,建立匹配位图表bitmap[idx],初始化为0,将上一步能匹配所存储的子项信息M[k]做如下映射:idx=M[k]>>5pos=M[k]&31bitmap[idx]|=(1<<pos)上述构建bitmap的过程用自然语言描述如下:(1)根据M[k]确定布尔表达式序号idx和位置pos,idx等于M[k]右移A位(本文中A=5),pos等于M[k]与B(本文中B=31)做与运算。(2)在匹配位图表bitmap[]中第idx项,即bitmap[idx]与1<<pos(1左移pos位)做或运算,表示序号为idx的布尔表达式的第pos子项已经存储在bitmap[idx]中。之后,判断当前bitmap[idx]中的二进制1的个数是否与规则序号为idx的子项数目(bool_item_num[idk])一致,若一致,将规则序号idx输出,匹配规则idx成功,并将bitmap[idx]置为-1,避免重复匹配。举例:设除了规则id0、id1和id2外,其他规则均不包含子项t1、t2、t4、t5,则按照上一步可得到如图7的子项信息M[]。按照映射关系,可以得到的值为:bitmap[id0]=0011bitmap[id1]=0011bitmap[id2]=0011bitmap[id3]=0000............bitmap[idk]=0000其中只有规则id1和id2的值中1的个数与其包含的子项个数(id1和id2都包含两条规则)相一致,故输出匹配规则id1和id2。与现有技术相比,本发明的有益效果:由于现今的与布尔表达式匹配需要对每个子项都需要判断,所需要的时间较长,为提升匹配速度,本发明采用了位图的模式,一方面,节省了存储空间,另一方面可以将某一子项的所有布尔表达式一次进行匹配,从而避免了重复的匹配。本发明在布尔表达式匹配搜索过程中运用bitmap结构,并采用多线程,以提高搜索效率。测试数据采用随机数据集,即布尔表达式文件和关键词文件由系统随机生成。测试环境:linux,64位;2颗4核cpu,主频1.8GHz,内核2.6.32。测试结果见表2,对于不同规模的数据集,随着线程数在一定范围的增多,预处理时间趋于稳定,扫描速度与线程数基本成正比。表2基于位图的布尔表达式匹配算法实验结果(固定布尔表达式子项数为8)附图说明图1为布尔表达式匹配系统结构图;图2为布尔表达式匹配系统部件图;图3为存储bool_item_num[idk]表及相应子项的子项信息并记录子项信息数目示意图;图4为item_message[]、item_count[]和item_id[]表构建示意图;图5为索引表index[]构建示意图;图6为示例文本项的查询过程示意图;图7为所有文本项得到的子项信息M[]示意图;图8依据<key,value>存储子项信息示意图;图9为实施例中item_message[]、item_id[]和item_count[]表构建示意图;图10index[]表构建示意图;图11示例文本项搜索过程示意图;图12为子项信息存储示意图。具体实施方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,可以理解的是,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。本发明提供了一种新的基于位图布尔表达式匹配方法及其系统,分为存储布尔表达式规则阶段和搜索文本阶段。下面依据具体的实例,用以说明本发明的操作过程。设布尔表达式规则如表3所示:表3为4个布尔表达式规则信息表布尔表达式规则序号规则信息02&3&411&223&435&6则存储与搜索阶段的过程详见下述过程。存储表达式规则阶段1)bool_item_num[idk]表记录各规则子项个数,其值可以由表4表示。利用STL中的map实现<key,value>存储,每个子项值所对应的value个数,如图8所示。2)将上一步已经升序排列的<key,value>对子项信息存储到一维数组item_message[]中。将各子项值减去最小子项值1,构建为item_id[]表。由图中count值构建item_count[]表,如图9所示。表4bool_item_num[idk]表idkbool_item_num[idk]031222323)确定参数θ,由于子项差值(6-1<65536),所以θ=0,由item_id[]表构建索引index[]表,如图10所示。搜索文本阶段1)输入各项文本值,如图11所示。先对文本值减去最小子项值1,得到暂存文本项。下面以原始文本值为3解释查找过程。由于θ=0,3-1=2,在区间[index[2],index[3]-1],即在index[2]找到item_id[]的范围,访问item_id[index[2]],即item_id[2]=2,与最初文本项减去最小子项值1所得的值一致,故继续查找item_message[]表。首先由item_count[]表确定其在item_message[]表的范围,查找范围区间为[item_count[2],item_count[3]),即区间[3,5)。所以需要保存item_message[3]和item_message[4]的值,即子项信息1和64。其他文本项也按照上述所示,若在item_id[]与规则子项值匹配,存储相对应的子项信息。3)按照上一步所示,找出所有子项信息,存储在M[]中,并可得到相对应的idx和pos信息,如图12所示。开辟内存,建立匹配位图表bitmap[idx],初始化为0,按照映射关系得到最终的bitmap信息:bitmap[0]=0111bitmap[1]=0010bitmap[2]=0011由于0号规则包含3个子项,2号规则包含2个子项,而相对应的匹配位图表中1的个数与之正好一致,故可以匹配0号和2号元素。当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1