发明内容
有鉴于此,本发明提供了一种规则的存储方法、匹配方法及装置,能够节省存储空间。
第一方面,本发明提供了一种规则的存储方法,包括:预先设置待存储的规则中的匹配条件的存储顺序,还包括:
S1:建立二叉树的根节点,将所述根节点作为第一个匹配条件的通配节点,将所述根节点作为当前节点,按照所述存储顺序,将当前规则的第一个匹配条件作为当前匹配条件;
S2:获取当前规则的当前匹配条件;
S3:确定当前节点及当前节点的左子树上的节点中存储当前匹配条件的节点,将存储当前匹配条件的节点作为当前节点;
S4:判断当前规则的当前匹配条件是否是当前规则的最后一个匹配条件,如果是,则将下一条规则作为当前规则,将根节点作为当前节点,按照所述存储顺序,将当前规则的第一个匹配条件作为当前匹配条件,执行步骤S2,否则,按照所述存储顺序,将当前规则的下一个匹配条件作为当前匹配条件,执行步骤S5;
S5:确定当前节点的右子节点,将当前节点的右子节点作为当前匹配条件的通配节点,将当前节点的右子节点作为当前节点,执行步骤S2;
其中,通配节点中存储对应的匹配条件,其中,通配节点中存储的对应的匹配条件的取值为任意值均可。
进一步地,所述步骤S3,包括:
检测当前节点及当前节点的左子树上的所有节点中是否存在存储当前匹配条件的节点,如果是,则将存储当前匹配条件的节点作为当前节点,执行步骤S4,否则,将当前节点及当前节点的左子树上的所有节点中最末端的节点作为当前节点,建立当前节点的左子节点,将当前节点的左子节点作为当前节点,将当前匹配条件存储到当前节点中,执行步骤S4;
和/或,所述步骤S5,包括:
检测当前节点是否存在右子节点,如果是,则将当前节点的右子节点作为当前节点,按照所述存储顺序,将当前规则的下一个匹配条件作为当前匹配条件,执行步骤S2,否则,按照所述存储顺序,将当前规则的下一个匹配条件作为当前匹配条件,建立当前节点的右子节点,将当前节点的右子节点作为当前匹配条件的通配节点,并将当前节点的右子节点作为当前节点,执行步骤S2。
进一步地,还包括:预先设置每个规则的标识;
所述S4中,在判断出当前规则的当前匹配条件是当前规则的最后一个匹配条件时,并在将下一条规则作为当前规则之前,还包括:将当前规则的标识存储到当前节点中;
和/或,还包括:节点中存储的匹配条件中包括:匹配条件的名称、匹配条件的取值、匹配条件的匹配方式、匹配条件的条件类型中的一种或多种;
和/或,还包括:将所述二叉树设置于内存中。
第二方面,本发明提供了一种规则的匹配方法,包括:预先根据存储规则的二叉树中匹配条件的存储顺序,设置待匹配条件的匹配顺序,还包括:
A1:将二叉树的根节点作为当前节点,按照所述匹配顺序,将第一个待匹配条件作为当前待匹配条件;
A2:获取当前待匹配条件;
A3:检测当前节点及当前节点的左子树上的所有节点中是否存在与当前待匹配条件相匹配的节点,如果是,则执行步骤A4,否则,结束当前流程;
A4:判断当前待匹配条件是否是最后一个待匹配条件,如果是,则结束当前流程,否则,将与当前待匹配条件相匹配的节点作为当前节点,执行步骤A5;
A5:检测当前节点是否存在右子节点,如果是,则将当前节点的右子节点作为当前节点,按照所述匹配顺序,将下一个待匹配条件作为当前待匹配条件,执行步骤A2,否则,结束当前流程。
进一步地,所述A3,包括:
B1:将当前节点及当前节点的左子树上的所有节点中最末端的节点作为当前节点;
B2:判断当前节点中存储的匹配条件与当前待匹配条件是否相匹配,如果是,则判定当前节点与当前待匹配条件相匹配,执行步骤B3,否则,判定当前节点与当前待匹配条件不匹配,执行步骤B3;
B3:检测当前节点是否存在父节点,如果是,则将当前节点的父节点作为当前节点,执行步骤B2,否则,输出与当前待匹配条件相匹配的节点。
进一步地,所述A4中,当判断出当前待匹配条件是最后一个待匹配条件时,在结束当前流程之前,还包括:获取当前节点中保存的规则的标识。
第三方面,本发明提供了一种规则的存储装置,包括:
第一设置单元,用于设置待存储的规则中的匹配条件的存储顺序;
根节点建立单元,用于建立二叉树的根节点,将所述根节点作为第一个匹配条件的通配节点,将所述根节点作为当前节点,按照所述存储顺序,将当前规则的第一个匹配条件作为当前匹配条件;
匹配条件获取单元,用于获取当前规则的当前匹配条件;
第一确定单元,用于确定当前节点及当前节点的左子树上的节点中存储当前匹配条件的节点,将存储当前匹配条件的节点作为当前节点;
第一判断单元,用于判断当前规则的当前匹配条件是否是当前规则的最后一个匹配条件,当判断结果为是时,将下一条规则作为当前规则,将根节点作为当前节点,按照所述存储顺序,将当前规则的第一个匹配条件作为当前匹配条件,通知所述匹配条件获取单元,当判断结果为否时,按照所述存储顺序,将当前规则的下一个匹配条件作为当前匹配条件,通知第二确定单元;
所述第二确定单元,用于确定当前节点的右子节点,将当前节点的右子节点作为当前匹配条件的通配节点,将当前节点的右子节点作为当前节点,通知所述匹配条件获取单元;
其中,所述通配节点中存储对应的匹配条件,其中,对应的匹配条件的取值为任意值均可。
进一步地,所述第一确定单元,用于检测当前节点及当前节点的左子树上的所有节点中是否存在存储当前匹配条件的节点,当判断结果为是时,将存储当前匹配条件的节点作为当前节点,通知所述第一判断单元,当判断结果为否时,将当前节点及当前节点的左子树上的所有节点中最末端的节点作为当前节点,建立当前节点的左子节点,将当前节点的左子节点作为当前节点,将当前匹配条件存储到当前节点中,通知所述第一判断单元;
和/或,所述第二确定单元,用于检测当前节点是否存在右子节点,当判断结果为是时,将当前节点的右子节点作为当前节点,按照所述存储顺序,将当前规则的下一个匹配条件作为当前匹配条件,通知所述匹配条件获取单元,当判断结果为否时,按照所述存储顺序,将当前规则的下一个匹配条件作为当前匹配条件,建立当前节点的右子节点,将当前节点的右子节点作为当前匹配条件的通配节点,并将当前节点的右子节点作为当前节点,通知所述匹配条件获取单元。
第四方面,本发明提供了一种规则的匹配装置,包括:
第二设置单元,用于根据存储规则的二叉树中匹配条件的存储顺序,设置待匹配条件的匹配顺序;
初始化单元,用于将二叉树的根节点作为当前节点,按照所述匹配顺序,将第一个待匹配条件作为当前待匹配条件;
待匹配条件获取单元,用于获取当前待匹配条件;
第一检测单元,用于检测当前节点及当前节点的左子树上的所有节点中是否存在与当前待匹配条件相匹配的节点,当判断结果为是时,通知第二判断单元;
第二判断单元,用于判断当前待匹配条件是否是最后一个待匹配条件,当判断结果为否时,将与当前待匹配条件相匹配的节点作为当前节点,通知第二检测单元;
第二检测单元,用于检测当前节点是否存在右子节点,当检测结果为是时,将当前节点的右子节点作为当前节点,按照所述匹配顺序,将下一个待匹配条件作为当前待匹配条件,通知所述待匹配条件获取单元。
进一步地,所述第一检测单元,包括:
更新子单元,用于将当前节点及当前节点的左子树上的所有节点中最末端的节点作为当前节点;
判断子单元,用于判断当前节点中存储的匹配条件与当前待匹配条件是否相匹配,当判断结果为是时,则判定当前节点与当前待匹配条件相匹配,通知检测子单元,当判断结果为否时,判定当前节点与当前待匹配条件不匹配,通知检测子单元;
所述检测子单元,用于检测当前节点是否存在父节点,当检测结果为是时,将当前节点的父节点作为当前节点,通知判断子单元,当判断结果为否时,输出与当前待匹配条件相匹配的节点;
和/或,
所述第二判断单元,还用于当判断出当前待匹配规则的当前待匹配条件是当前待匹配规则的最后一个待匹配条件时,获取当前节点中保存的规则的标识。
本发明提供了一种规则的存储方法、匹配方法及装置,将规则存储在二叉树中,将规则的匹配条件按照存储顺序进行存储,当已经存储在二叉树中的任一规则的前n个匹配条件与当前规则中对应的前n个匹配条件相同时,则无需再保存当前规则的前n个匹配条件,只需在前n个匹配条件的基础上继续保存剩余的匹配条件即可,节省了存储空间。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例,基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
如图1所示,本发明实施例提供了一种规则的存储方法,该方法可以包括以下步骤:
步骤101:预先设置待存储的规则中的匹配条件的存储顺序;
步骤102:建立二叉树的根节点,将所述根节点作为第一个匹配条件的通配节点,将所述根节点作为当前节点,按照所述存储顺序,将当前规则的第一个匹配条件作为当前匹配条件;
步骤103:获取当前规则的当前匹配条件;
步骤104:确定当前节点及当前节点的左子树上的节点中存储当前匹配条件的节点,将存储当前匹配条件的节点作为当前节点;
步骤105:判断当前规则的当前匹配条件是否是当前规则的最后一个匹配条件,如果是,则执行步骤106,否则,执行步骤107;
步骤106:将下一条规则作为当前规则,将根节点作为当前节点,按照所述存储顺序,将当前规则的第一个匹配条件作为当前匹配条件,执行步骤103;
步骤107:按照所述存储顺序,将当前规则的下一个匹配条件作为当前匹配条件,执行步骤108;
步骤108:确定当前节点的右子节点,将当前节点的右子节点作为当前匹配条件的通配节点,将当前节点的右子节点作为当前节点,执行步骤103;
其中,通配节点中存储对应的匹配条件,其中,通配节点中存储的对应的匹配条件的取值为任意值均可。
通过本发明实施例提供的一种规则的存储方法,将规则存储在二叉树中,将规则的匹配条件按照存储顺序进行存储,当已经存储在二叉树中的任一规则的前n个匹配条件与当前规则中对应的前n个匹配条件相同时,则无需再保存当前规则的前n个匹配条件,只需在前n个匹配条件的基础上继续保存剩余的匹配条件即可,节省了存储空间。
在一种可能的实现方式中,所述步骤S3,包括:
检测当前节点及当前节点的左子树上的所有节点中是否存在存储当前匹配条件的节点,如果是,则将存储当前匹配条件的节点作为当前节点,执行步骤S4,否则,将当前节点及当前节点的左子树上的所有节点中最末端的节点作为当前节点,建立当前节点的左子节点,将当前节点的左子节点作为当前节点,将当前匹配条件存储到当前节点中,执行步骤S4。
在一种可能的实现方式中,所述步骤S5,包括:
检测当前节点是否存在右子节点,如果是,则将当前节点的右子节点作为当前节点,按照所述存储顺序,将当前规则的下一个匹配条件作为当前匹配条件,执行步骤S2,否则,按照所述存储顺序,将当前规则的下一个匹配条件作为当前匹配条件,建立当前节点的右子节点,将当前节点的右子节点作为当前匹配条件的通配节点,并将当前节点的右子节点作为当前节点,执行步骤S2。
在一种可能的实现方式中,为了能够标识当前节点所存储的规则,该方法还包括:预先设置每个规则的标识;
所述S4中,在判断出当前规则的当前匹配条件是当前规则的最后一个匹配条件时,并在将下一条规则作为当前规则之前,还包括:将当前规则的标识存储到当前节点中。
由于存储规则的匹配条件的节点可能同时被多个规则共用,因此,可以在存储规则的最后一个匹配条件的节点中存储规则的标识。这样便于查找该规则中有哪些匹配条件。
在一种可能的实现方式中,该方法包括:节点中存储的匹配条件中包括:匹配条件的名称、匹配条件的取值、匹配条件的匹配方式、匹配条件的条件类型。其中,匹配条件的名称包括:厂商ID、地市ID等;匹配条件的取值,用于保存满足当前匹配条件的取值,如果当前规则的当前匹配条件的取值为任意值均可,即表示通配用通配项,保存当前匹配条件的节点为通配节点;匹配条件的匹配方式,用于指定该匹配条件的匹配的方式,包括精确匹配、模糊匹配、通配;匹配条件的条件类型,包括:数值、字符串、集合。
在一种可能的实现方式中,为了减少磁盘IO的占用,所述预先设置用于存储所述规则的二叉树,包括:将所述二叉树设置于内存中。
为使本发明的目的、技术方案和优点更加清楚,下面结合附图及具体实施例对本发明作进一步地详细描述。
如表3所示,表3中示出了要保存到二叉树中的规则。
表3
规则 |
厂商ID |
地市ID |
设备类型 |
网元 |
规则1 |
1 |
530 |
200 |
BSC1 |
规则2 |
5 |
531 |
200 |
BSC2 |
规则3 |
5 |
531 |
200 |
BSC3 |
规则4 |
1 |
530 |
*(通配) |
*(通配) |
…… |
…… |
…… |
…… |
…… |
如图2所示,图2示出了表3中的规则形成的二叉树。
图2中的节点1为厂商ID条件的通配节点;节点2存储了厂商ID条件,取值为1;节点3为地市ID条件的通配节点;节点4存储了地市ID条件,取值为530;节点5为设备类型条件的通配节点;节点6存储了设备类型条件,取值为200;节点7为网元条件的通配节点;节点8存储了网元条件,取值为BSC1;节点9存储了厂商ID条件,取值去5;节点10为地市ID条件的通配节点;节点11存储了地市ID条件,取值为531;;节点12为设备类型条件的通配节点;节点13存储了设备类型条件,取值为200;节点14为网元条件的通配节点;节点15存储了网元条件,取值为BSC2;节点16存储了网元条件,取值为BSC3;节点17为网元条件的通配节点。另外,节点8存储了规则1的最后一个匹配条件,节点8中还存储了规则1的标识;节点15存储了规则2的最后一个匹配条件,节点15中还存储了规则2的标识;节点16存储了规则3的最后一个匹配条件,节点16中还存储了规则3的标识;节点17存储了规则4的最后一个匹配条件,节点17中还存储了规则4的标识。
通过表3可以看出,规则2和规则3只有最后一个匹配条件不同,从图2中可以看出,规则2和规则3的前3个匹配条件均存储在相同的节点中,具体为:节点9、节点11、节点13中,只有最后一个匹配条件存储在不同的节点中,具体分布是:节点15、节点16。本发明实施例提供的规则的存储方法,节省了存储空间。
在上述表2所示的二叉树中,再添加一条新的规则,该规则如表4所示:
表4
规则 |
厂商ID |
地市ID |
设备类型 |
网元 |
规则5 |
1 |
531 |
200 |
BSC1 |
具体的存储方法如图3所示,本发明实施例提供了一种规则的存储方法,该方法可以包括以下步骤:
步骤301:设置规则5中的匹配条件的存储顺序,其中,匹配条件的存储顺序依次是厂商ID条件、地市ID条件、设备类型条件、网元条件。
每个待存储的规则包括至少一个匹配条件,在存储规则时,预先设置匹配条件的存储顺序,规则的匹配条件的存储顺序要一致,这样才能节省存储空间。在该实施例中,将规则5存储到图2的二叉树中,由于图2的二叉树中匹配条件的存储顺序是厂商ID、地市ID、设备类型、网元,因此规则5的存储顺序应该与二叉树中的规则相同。
步骤302:获取规则5的厂商ID条件。
按照存储顺序,首先要存储厂商ID条件,规则5中厂商ID条件的取值为1。
步骤303:检测节点1及节点1的左子树上的所有节点中是否存在存储规则5的厂商ID条件的节点,并检测到存在存储规则5的厂商ID条件的节点2。
节点1的左子树上的所有节点为:节点2、节点9。
规则5的厂商ID条件的取值为1,节点2中保存的厂商ID条件的取值为1,与规则5的厂商ID条件相同,则无需在通过其他节点来存储规则5的厂商ID条件。
由于厂商ID条件的存储顺序是第一个,则该二叉树的根节点为节点1,是厂商ID条件的通配节点。在进行检测时,从根节点开始检测。
在该步骤中,通过判断节点1及节点1的左子树上的所有节点中是否存在存储当前匹配条件的节点,得到节点2。
步骤304:检测规则5的厂商ID条件是否是规则5的最后一个匹配条件,并检测出规则5的厂商ID条件不是规则5的最后一个匹配条件。
在存储完一个匹配条件后,需要判断该规则的所有匹配条件是否都已经存储到二叉树中,如果是,就结束流程,否则,就存储下一个匹配条件。
步骤305:检测节点2是否存在右子节点,并检测到节点2存在右子节点3。
步骤306:检测节点3及节点3的左子树上的所有节点中是否存在存储规则5的地市ID条件的节点,并检测到不存在存储规则5的厂商ID条件的节点。
步骤307:建立节点3的右子节点18,将节点3的右子节点18作为地市ID条件的通配节点18。
如图4所示,节点18中存储了地市ID条件,取值为任意值均可。
步骤308:获取规则5的地市ID条件,检测节点18及节点18的左子树上的所有节点中是否存在存储规则5的地市ID条件的节点,并检测到不存在存储规则5的地市ID条件的节点。
步骤309:建立节点18的左子节点19,将规则5的地市ID条件存储到节点19中。
节点19中存储了规则5的地市ID条件,取值为531。
在该步骤中,将节点18及节点18的左子树上的所有节点中最末端的节点作为当前节点,该当前节点为节点18,建立节点18的左子节点19,将规则5的地市ID条件存储到节点19中。
在对规则5的设备类型条件和网元条件进行存储时,也采用上述类似的步骤,建立节点19的右子节点20,建立节点20的左子节点21,建立节点21的右子节点22,建立节点22的左子节点23。其中,节点20为设备类型条件的通配节点;节点21存储了规则5的设备类型条件,取值为200;节点22为网元条件的通配节点;节点23存储了规则5的网元条件,取值为BSC1,另外,可以在节点23中存储规则5的标识,具体参见图4。
在存储了规则5的网元条件后,判断规则5的网元条件是否是规则5的最后一个匹配条件,并判断出规则5的网元条件是否是规则5的最后一个匹配条件,可以将规则5的标识存储到节点23中,结束对规则5的存储。
如图5所示,本发明实施例提供了一种规则的匹配方法,该方法可以包括以下步骤:
步骤501:预先根据存储规则的二叉树中匹配条件的存储顺序,设置待匹配条件的匹配顺序;
步骤502:将二叉树的根节点作为当前节点,按照所述匹配顺序,将第一个待匹配条件作为当前待匹配条件;
步骤503:获取当前待匹配条件;
步骤504:检测当前节点及当前节点的左子树上的所有节点中是否存在与当前待匹配条件相匹配的节点,如果是,则执行步骤505,否则,结束当前流程;
步骤505:判断当前待匹配条件是否是最后一个待匹配条件,如果是,则结束当前流程,否则,执行步骤506;
步骤506:将与当前待匹配条件相匹配的节点作为当前节点,执行步骤507;
步骤507:检测当前节点是否存在右子节点,如果是,则执行步骤508,否则,结束当前流程;
步骤508:将当前节点的右子节点作为当前节点,按照所述匹配顺序,将下一个待匹配条件作为当前待匹配条件,执行步骤503。
通过本发明实施例提供的一种规则的匹配方法,按照二叉树中规则的存储顺序设置待匹配条件的匹配顺序,并按照匹配顺序进行匹配,由于规则在存储时,对于前n个匹配条件相同的规则,将这前n个匹配条件分别存储在相同的节点中,在进行条件匹配时,无需对每个规则进行单独的匹配,可以对前n个匹配条件相同的规则的前n个匹配条件同时进行匹配,减少了匹配次数,提高了匹配次数。
在一种可能的实现方式中,所述A3,包括:
B1:将当前节点及当前节点的左子树上的所有节点中最末端的节点作为当前节点;
B2:判断当前节点中存储的匹配条件与当前待匹配条件是否相匹配,如果是,则判定当前节点与当前待匹配条件相匹配,执行步骤B3,否则,判定当前节点与当前待匹配条件不匹配,执行步骤B3;
B3:检测当前节点是否存在父节点,如果是,则将当前节点的父节点作为当前节点,执行步骤B2,否则,输出与当前待匹配条件相匹配的节点。
在一种可能的实现方式中,为了便于获取匹配的规则,所述A4中,当判断出当前待匹配条件是最后一个待匹配条件时,在结束当前流程之前,还包括:获取当前节点中保存的规则的标识。
为使本发明的目的、技术方案和优点更加清楚,下面结合附图及具体实施例对本发明作进一步地详细描述。
如表5所示,表5示出了4个待匹配条件。将表5中的待匹配条件与图2中的二叉树中的规则进行匹配。
表5
厂商ID |
地市ID |
设备类型 |
网元 |
1 |
530 |
200 |
BSC1 |
具体的匹配方法如图6所示,本发明实施例提供了一种规则的匹配方法,该方法可以包括以下步骤:
步骤601:设置待匹配条件的匹配顺序,其中,待匹配条件的匹配顺序依次是厂商ID待匹配条件、地市ID待匹配条件、设备类型待匹配条件、网元待匹配条件。
由于图2中匹配条件的存储顺序为厂商ID条件、地市ID条件、设备类型条件、网元条件,所以将匹配顺序依次是厂商ID待匹配条件、地市ID待匹配条件、设备类型待匹配条件、网元待匹配条件。
步骤602:将二叉树的根节点1作为当前节点,按照匹配顺序,将厂商ID待匹配条件作为当前待匹配条件。
步骤603:获取厂商ID待匹配条件。
其中,待匹配条件中的厂商ID条件的取值为1。
步骤604:检测节点1及节点1的左子树上的所有节点中是否存在与厂商ID待匹配条件相匹配的节点,并检测到存在与厂商ID待匹配条件相匹配的节点2和节点1,将节点2作为当前节点。
在当前节点及当前节点的左子树上的所有节点中可能存在多个与厂商ID待匹配条件相匹配的节点。例如:节点2中厂商ID条件的取值为1,与厂商ID待匹配条件的取值相同,则节点2与厂商ID待匹配条件相匹配;节点1中厂商ID条件的取值为任意值均可,与任意的厂商ID条件的取值都匹配,所以节点1与厂商ID待匹配条件相匹配。
对于每个相匹配的节点,在其右子节点上进行对下一个待匹配条件进行类似的处理。
该步骤可以通过以下方式实现,包括:
C1:将节点1及节点1的左子树上的所有节点中最末端的节点9作为当前节点。
C2:判断当前节点9中存储的厂商ID条件与厂商ID待匹配条件是否相匹配,并判断出节点9与厂商ID待匹配条件不匹配。
节点9中存储的厂商ID条件与厂商ID待匹配条件的取值不同,所以不匹配。
C3:检测节点9是否存在父节点,并检测出节点9存在父节点2。
C4:判断节点2中存储的厂商ID条件与厂商ID待匹配条件是否相匹配,并判断出节点2与厂商ID待匹配条件相匹配。
节点2中存储的厂商ID条件与厂商ID待匹配条件的取值相同,所以相匹配。
C5:检测节点2是否存在父节点,并检测出节点2存在父节点1。
C6:判断节点1中存储的厂商ID条件与厂商ID待匹配条件是否相匹配,并判断出节点1与厂商ID待匹配条件相匹配。
节点1中厂商ID条件的取值为任意值均可,与任意的厂商ID条件的取值都匹配,所以节点1与厂商ID待匹配条件相匹配。
C7:检测节点1是否存在父节点,并检测出节点1不存在父节点,输出与厂商ID待匹配条件相匹配的节点2和节点1。
步骤605:检测厂商ID待匹配条件是否是最后一个待匹配条件,并检测出厂商ID待匹配条件不是最后一个待匹配条件。
步骤606:检测节点2是否存在右子节点,并检测出节点2存在右子节点3。
步骤607:获取地市ID待匹配条件,检测节点3及节点3的左子树上的所有节点中是否存在与地市ID待匹配条件相匹配的节点,并检测到存在与地市ID待匹配条件相匹配的节点3和节点4,将节点4作为当前节点。
步骤608:检测地市ID待匹配条件是否是最后一个待匹配条件,并检测出地市ID待匹配条件不是最后一个待匹配条件,检测节点4是否存在右子节点,并检测出节点4存在右子节点5。
步骤609:获取设备类型待匹配条件,检测节点5及节点5的左子树上的所有节点中是否存在与设备类型待匹配条件相匹配的节点,并检测到存在与设备类型待匹配条件相匹配的节点5和节点6,将节点6作为当前节点。
步骤610:检测设备类型待匹配条件是否是最后一个待匹配条件,并检测出设备类型待匹配条件不是最后一个待匹配条件,检测节点6是否存在右子节点,并检测出节点6存在右子节点7。
步骤611:获取网元待匹配条件,检测节点7及节点7的左子树上的所有节点中是否存在与网元待匹配条件相匹配的节点,并检测到存在与设备类型待匹配条件相匹配的节点7和节点8。
步骤612:检测网元待匹配条件是否是最后一个待匹配条件,并检测出网元待匹配条件是最后一个待匹配条件,输出与所有待匹配条件相匹配的规则1,结束匹配流程。
由于网元待匹配条件是最后一个待匹配条件,所有结束匹配,可以输出节点8中存储的规则1的标识,得到待匹配条件与规则1相匹配,将规则1存入规则集中,并检查出网元7中没有对应的规则。
另外,对于节点1采用与节点2类似的匹配流程进行处理,由于节点1没有右子节点,所以结束匹配流程,没有找到相匹配的规则。
对于节点3采用与节点4类似的匹配流程进行处理,由于节点3没有右子节点,所以结束匹配流程,没有找到相匹配的规则。
对于节点5采用与节点6类似的匹配流程进行处理,由于节点5有右子节点17,节点17中网元条件的取值为任意值均可,与任意的网元条件的取值都匹配,所以节点17与网元待匹配条件相匹配,输出节点17中存储的规则4的标识,得到待匹配条件与规则4相匹配,将规则4存入规则集中。
参见图7,本发明实施例提供了一种规则的存储装置,包括:
第一设置单元701,用于设置待存储的规则中的匹配条件的存储顺序;
根节点建立单元702,用于建立二叉树的根节点,将所述根节点作为第一个匹配条件的通配节点,将所述根节点作为当前节点,按照所述存储顺序,将当前规则的第一个匹配条件作为当前匹配条件;
匹配条件获取单元703,用于获取当前规则的当前匹配条件;
第一确定单元704,用于确定当前节点及当前节点的左子树上的节点中存储当前匹配条件的节点,将存储当前匹配条件的节点作为当前节点;
第一判断单元705,用于判断当前规则的当前匹配条件是否是当前规则的最后一个匹配条件,当判断结果为是时,将下一条规则作为当前规则,将根节点作为当前节点,按照所述存储顺序,将当前规则的第一个匹配条件作为当前匹配条件,通知所述匹配条件获取单元703,当判断结果为否时,按照所述存储顺序,将当前规则的下一个匹配条件作为当前匹配条件,通知第二确定单元706;
所述第二确定单元706,用于确定当前节点的右子节点,将当前节点的右子节点作为当前匹配条件的通配节点,将当前节点的右子节点作为当前节点,通知所述匹配条件获取单元703;
其中,所述通配节点中存储对应的匹配条件,其中,对应的匹配条件的取值为任意值均可。
在一种可能的实现方式中,第一确定单元704,用于检测当前节点及当前节点的左子树上的所有节点中是否存在存储当前匹配条件的节点,当判断结果为是时,将存储当前匹配条件的节点作为当前节点,通知所述第一判断单元705,当判断结果为否时,将当前节点及当前节点的左子树上的所有节点中最末端的节点作为当前节点,建立当前节点的左子节点,将当前节点的左子节点作为当前节点,将当前匹配条件存储到当前节点中,通知所述第一判断单元705。
在一种可能的实现方式中,所述第二确定单元706,用于检测当前节点是否存在右子节点,当判断结果为是时,将当前节点的右子节点作为当前节点,按照所述存储顺序,将当前规则的下一个匹配条件作为当前匹配条件,通知所述匹配条件获取单元703,当判断结果为否时,按照所述存储顺序,将当前规则的下一个匹配条件作为当前匹配条件,建立当前节点的右子节点,将当前节点的右子节点作为当前匹配条件的通配节点,并将当前节点的右子节点作为当前节点,通知所述匹配条件获取单元703。
在一种可能的实现方式中,该装置还包括:
第二设置单元,用于设置每个规则的标识;
所述第二判断单元,还用于在判断出当前规则的当前匹配条件是当前规则的最后一个匹配条件时,并在将下一条规则作为当前规则之前,将当前规则的标识存储到当前节点中。
上述装置内的各单元之间的信息交互、执行过程等内容,由于与本发明方法实施例基于同一构思,具体内容可参见本发明方法实施例中的叙述,此处不再赘述。
参见图8,本发明实施例提供了一种规则的匹配装置,包括:
第二设置单元801,用于根据存储规则的二叉树中匹配条件的存储顺序,设置待匹配条件的匹配顺序;
初始化单元802,用于将二叉树的根节点作为当前节点,按照所述匹配顺序,将第一个待匹配条件作为当前待匹配条件;
待匹配条件获取单元803,用于获取当前待匹配条件;
第一检测单元804,用于检测当前节点及当前节点的左子树上的所有节点中是否存在与当前待匹配条件相匹配的节点,当判断结果为是时,通知第二判断单元805;
第二判断单元805,用于判断当前待匹配条件是否是最后一个待匹配条件,当判断结果为否时,将与当前待匹配条件相匹配的节点作为当前节点,通知第二检测单元806;
第二检测单元806,用于检测当前节点是否存在右子节点,当检测结果为是时,将当前节点的右子节点作为当前节点,按照所述匹配顺序,将下一个待匹配条件作为当前待匹配条件,通知所述待匹配条件获取单元803。
在一种可能的实现方式中,所述第一检测单元804,包括:
更新子单元,用于将当前节点及当前节点的左子树上的所有节点中最末端的节点作为当前节点;
判断子单元,用于判断当前节点中存储的匹配条件与当前待匹配条件是否相匹配,当判断结果为是时,则判定当前节点与当前待匹配条件相匹配,通知检测子单元,当判断结果为否时,判定当前节点与当前待匹配条件不匹配,通知检测子单元;
所述检测子单元,用于检测当前节点是否存在父节点,当检测结果为是时,将当前节点的父节点作为当前节点,通知判断子单元,当判断结果为否时,输出与当前待匹配条件相匹配的节点;
在一种可能的实现方式中,所述第二判断单元805,还用于当判断出当前待匹配规则的当前待匹配条件是当前待匹配规则的最后一个待匹配条件时,获取当前节点中保存的规则的标识。
上述装置内的各单元之间的信息交互、执行过程等内容,由于与本发明方法实施例基于同一构思,具体内容可参见本发明方法实施例中的叙述,此处不再赘述。
通过上述描述可见,本发明实施例提供的一种规则的存储方法、匹配方法及装置,具有如下有益效果:
1、通过本发明实施例提供的一种规则的存储方法、匹配方法及装置,将规则存储在二叉树中,将规则的匹配条件按照存储顺序进行存储,当已经存储在二叉树中的任一规则的前n个匹配条件与当前规则中对应的前n个匹配条件相同时,则无需再保存当前规则的前n个匹配条件,只需在前n个匹配条件的基础上继续保存剩余的匹配条件即可,节省了存储空间。
2、通过本发明实施例提供的一种规则的存储方法、匹配方法及装置,按照二叉树中规则的存储顺序设置待匹配条件的匹配顺序,并按照匹配顺序进行匹配,由于规则在存储时,对于前n个匹配条件相同的规则,将这前n个匹配条件分别存储在相同的节点中,在进行条件匹配时,无需对每个规则进行单独的匹配,可以对前n个匹配条件相同的规则的前n个匹配条件同时进行匹配,减少了匹配次数,提高了匹配次数。
需要说明的是,在本文中,诸如第一和第二之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个······”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同因素。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储在计算机可读取的存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质中。
最后需要说明的是:以上所述仅为本发明的较佳实施例,仅用于说明本发明的技术方案,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所做的任何修改、等同替换、改进等,均包含在本发明的保护范围内。