CN102591958A - 基于tcam的确定性有穷状态自动机的匹配方法和装置 - Google Patents
基于tcam的确定性有穷状态自动机的匹配方法和装置 Download PDFInfo
- Publication number
- CN102591958A CN102591958A CN2011104516487A CN201110451648A CN102591958A CN 102591958 A CN102591958 A CN 102591958A CN 2011104516487 A CN2011104516487 A CN 2011104516487A CN 201110451648 A CN201110451648 A CN 201110451648A CN 102591958 A CN102591958 A CN 102591958A
- Authority
- CN
- China
- Prior art keywords
- state
- tcam
- subclauses
- states
- subsets
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及一种基于TCAM(ternary content addressable memory,三态内容寻址存储器)的DFA(deterministic finite automaton,确定性有穷状态自动机)的匹配方法和装置。该方法主要包括:将DFA的每个状态用若干三态内容寻址存储器TCAM条目表示,每个TCAM条目由出发状态、输入字符和到达状态三个域组成,表示同一状态的TCAM条目的出发状态相同;以具体的所述出发状态和输入字符的拼接作为搜索关键词,按照所述搜索关键字在所述DFA的所有TCAM条目中进行搜索,将搜索得到的到达状态作为输出结果。本发明实施例通过将DFA的每个状态用若干TCAM条目表示,利用单状态条目压缩算法、不同状态共享TCAM条目、共享状态转换的方法大大减少存储整个DFA所需的TCAM条目数量。
Description
技术领域
本发明涉及计算机应用技术领域,尤其涉及一种基于三态内容寻址存储器的DFA(deterministic finite automaton,确定性有穷状态自动机)的匹配方法和装置。
背景技术
从最早的grep(global search regular expression and print out the line,全面搜索正则表达式并把行打印出来),到现在非常流行的PCRE(PerlCompatible Regular Expressions,perl语言兼容正则表达式),正则表达式因其强大、便捷、高效的文本处理能力,得到了广泛的使用。目前,几乎所有主编程流语言都支持正则表达式;在软件开发和日常数据处理工作中,正则表达式更是人们不可或缺的得力助手。
正则表达式是一种“通用的模式语言”,它由两种字符构成:特殊字符和普通字符。特殊字符称为“元字符”,普通字符称为“文字”。“文字”就像语言中的单词,“元字符”则像文法;把单词按文法组织起来,就有了语义。正如文章由句子段落构成一样,一个完整的正则表达式也是由小的模块单元组成的。虽然模块单元各自都很简单,但它们的组合却千变万化。正是这种简单模块的复杂组合,使得正则表达式具有了强大的表达能力。
正则表达式的匹配是通过有穷状态自动机来完成的。从正则表达式构造NFA(Non-deterministic finite automaton,不确定性有穷状态自动机)是一个非常经典的问题,可以分三步完成:第一步,用Thompson算法从正则表达式生成ε-NFA;第二步,用子集构造法从ε-NFA构造DFA;第三步,对第二步得到的DFA进行状态最小化,从而得到最终的状态数最少的DFA。DFA实现正则表达式匹配的原理如下:从DFA的起始状态出发,每读入一个字符就做一次状态转换。如果到达的状态是接收状态,说明当前输入与正在检查的正则表达式匹配,如果到达的状态是死状态(即所有的256边全都转移到自身的状态),说明当前输入与正在检查的正则表达式不匹配,否则继续输入字符,直至抵达某个接收状态或死状态,或输入字符被读完。
随着正则表达式在互联网络中的应用,因为互联网络具有流量大、速度快的特点,又对正则表达式提出了新的要求,需要能够并行匹配多个正则表达式。正则表达式的并行匹配是这样实现的:先由一组多个正则表达式生成一个有限状态自动机,正则表达式的匹配也就变成了自动机的状态转换。自动机的每个接收状态对应着一个或者若干个正则表达式。当自动机到达某个接收状态,就可以确信数据流中存在与该接收状态对应的正则表达式匹配的数据。上述有限状态自动机从本质上说是一张二维表:表上的一行代表自动机的一个状态,每一行由256个单元组成,每个单元存储一个指针。例如,第i行第j列的单元,存储的是当自动机处在状态i时,读入ASCII码为j的字符时应该转换到的目标状态的指针。如果有限状态自动机有N个状态,这张表就有N行。这张大小为N·256的表,记录了有限状态机自动机的所有信息。
目前,由于上述有限状态自动机的体量非常大,导致上述基于DFA的正则表达式匹配方法亟待改进。
发明内容
本发明的实施例提供了一种基于TCAM的DFA的匹配方法和装置,以提高基于DFA的正则表达式匹配的速度。
一种基于TCAM的确定DFA的匹配方法,包括:
将确定性有穷状态自动机DFA的每个状态用若干三态内容寻址存储器TCAM条目表示,每个TCAM条目由出发状态、输入字符和到达状态三个域组成,表示同一状态的TCAM条目的出发状态相同;
以具体的所述出发状态和输入字符的拼接作为搜索关键词,按照所述搜索关键字在所述DFA的所有TCAM条目中进行搜索,将搜索得到的到达状态作为输出结果。
一种基于TCAM的DFA的匹配装置,包括:
TCAM条目构造模块,用于将确定性有穷状态自动机DFA的每个状态用若干三态内容寻址存储器TCAM条目表示,每个TCAM条目由出发状态、输入字符和到达状态三个域组成,表示同一状态的TCAM条目的出发状态相同;
搜索匹配模块,用于以具体的所述出发状态和输入字符的拼接作为搜索关键词,按照所述搜索关键字在所述DFA的所有TCAM条目中进行搜索,将搜索得到的到达状态作为输出结果。
由上述本发明的实施例提供的技术方案可以看出,本发明实施例通过将正则表达式等构造的DFA的每个状态用若干TCAM条目表示,使得正则表达式的一次状态转换仅需要一次TCAM条目并行查找就能完成,从而提高了基于DFA的正则表达式匹配的速度。
附图说明
图1为本发明实施例一提供的一种基于TCAM的DFA的匹配方法的具体处理流程图;
图2为本发明实施例一所提供的用于匹配正则表达式1[0-2]|[1-9]:[0-5][0-9](am|pm)的DFA;
图3为本发明实施例一提供的用于表示图2中状态1的部分TCAM条目;
图4为本发明实施例一提供的对图3中的状态1的TCAM条目应用单状态条目压缩算法之后的结果;
图5为本发明实施例一提供的识别正则表达式(bd)*(ce)+和(ce)*(bd)+的DFA;
图6为本发明实施例一提供的识别正则表达式(bd)*(ce)+和(ce)*(bd)+的TCAM条目;
图7为本发明实施例一提供的对应于图5的DFA的状态号的编码方案
图8为本发明实施例二提供的用于说明状态间的“相似度”的定义的TCAM条目;
图9为本发明实施例二提供的用于说明状态间的“模板”的定义的TCAM条目;
图10为本发明实施例二提供的根据状态间的相似度为某个DFA构建的最小生成树;
图11为本发明实施例二提供的基于图6中的最小生成树对状态号进行重编码的过程;
图12为本发明实施例三提供的某DFA的四个状态的TCAM条目;
图13为本发明实施例三提供的通过调整状态号编码后所需的某DFA的四个状态的TCAM条目;
图14为本发明实施例三提供的用于说明状态子集之间的“相似度”的定义的TCAM条目;
图15为本发明实施例三提供的经状态内最小化的有6个状态的DFA的TCAM条目;
图16为本发明实施例三提供的为图15中所示的DFA所构建的递归划分树;
图17为本发明实施例三提供的图16中删去“核心集”的根节点的带权图,图中权值为状态间的相似度;
图18为本发明实施例三提供的划分图17的根节点时逐渐生长的状态子集;
图19为本发明实施例三提供的图16中删去“核心集”的状态子集{0,1,2}的带权图,图中权值为状态间的相似度;
图20为本发明实施例三提供的基于图16的递归划分树,自底向上的重编码过程示意图;
图21为本发明实施例三提供的图16中的状态号的编码方案;
图22为本发明实施例三提供的图15最终经过状态号编码后所需的TCAM条目;
图23为本发明实施例四提供的一种基于TCAM的DFA的匹配装置的具体结构图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合附图,以对本发明实施例进行清楚、完整地描述人员。
实施例一
该实施例提供的一种基于三态内容寻址存储器的正则表达式的匹配方法的具体处理流程如图1所示,包括如下的处理步骤:
步骤S101、将DFA的每个状态用若干TCAM条目表示,每个TCAM条目由“出发状态”、“输入字符”和“到达状态”三个域组成。
TCAM(ternary content addressable memory,三态内容寻址存储器)是从CAM(content addressable memory,内容寻址存储器)的基础上发展而来的。一般的CAM存储器中每个bit位的状态只有两个,“0”或“1”,而TCAM中每个bit位有三种状态,除掉“0”和“1”外,还有一个“don’t care”状态,所以称为“三态”,它是通过掩码来实现的,正是TCAM的这个第三种状态特征使其既能进行精确匹配查找,又能进行模糊匹配查找,并且具有查找速度快、操作简单的优点。
本发明实施例将DFA的每个状态用若干TCAM条目表示,每个TCAM条目由“出发状态”、“输入字符”和“到达状态”三个域组成。表示同一状态的TCAM条目的“出发状态”相同。
当上述输入字符采用ASCII字符时,因为ASCII字符有256个,所有每个状态对应256个TCAM条目。在实际应用中,上述“出发状态”域和“输入字符”域可以是由“0”、“1”和“*”组成的字符串,“到达状态”域可以是“0”和“1”组成的字符串。
上述DFA可能是由正则表达式规则编译得到,也可能是由字符串规则编译得到,甚至别的任何方式得到。
步骤S102、利用单状态条目压缩算法来减少存储单个状态所需的TCAM条目数量。
上述单状态条目压缩算法的处理过程主要包括:遍历所述DFA的任意状态i的所有TCAM条目,找出出现频率最高的“到达状态”,记为D状态,删除所述状态i的到达状态是状态D的TCAM条目,添加一个特定TCAM条目到状态i的TCAM条目列表的末尾,所述特定TCAM条目的出发状态是状态i、输入字符是“********”,到达状态是状态D。
两两相邻地比较所述状态i的剩余的TCAM条目,如果两个相邻的TCAM条目的到达状态相同、输入字符中只有第K个比特不同,则将所述两个相邻的TCAM条目中的任一个TCAM条目的输入字符的第K个比特以“*”代替,其余的比特保持不变构成新的输入字符;
将所述两个相邻的TCAM条目删除,增加一个所述状态i的新的TCAM条目,所述新的TCAM条目的出发状态是状态i、输入字符是所述新的输入字符,到达状态是所述两个相邻的TCAM条目中的到达状态。
上述单状态条目压缩算法的具体处理过程包括如下几个步骤:
步骤1、遍历任意状态i的256个TCAM条目,找出出现频率最高的“到达状态”,记为D状态。
比如,图2是用于匹配正则表达式1[0-2]|[1-9]:[0-5][0-9](am|pm)的DFA,该正则表达式识别12小时制的时刻,例如11:59am。状态9和状态10是接收状态。用TCAM存储该DFA,在不经过任何压缩的情况下,每个状态需要256个TCAM条目,因此总共需要11×256个TCAM条目。
图3是表示图2中状态1的若干TCAM条目(因空间有限,状态1的256个TCAM条目不能尽数列出)。每个TCAM条目由“出发状态”、“输入字符”和“到达状态”三个域组成。对状态1,当“输入字符”为其余245个未在图3中列出的ASCII字符时,“到达状态”都是死状态。
对于说明书附图中出现的“出发状态”、和“到达状态”,为方便说明,它们的值用状态ID或状态ID的编码表示,“输入字符”的值用输入字符的ASCII编码表示,TCAM中实际存储的是它们的编码。
针对图3中的状态1,上述出现频率最高的D状态是死状态(dead)。
步骤2、删除状态i的“到达状态”是状态D的TCAM条目。
针对图3中的状态1,则删除“到达状态”是死状态的所有TCAM条目。
步骤3、添加一个条目到状态i的TCAM条目列表的末尾,其“出发状态”是状态i,其“输入字符”是8个“不关心状态(*)(“********”),其“到达状态”是状态D。
针对图3中的状态1,上述添加的一个条目为图4中的最后一个条目。
步骤4、针对上述状态i的剩余的TCAM条目,对“到达状态”相同、而且“输入字符”可以被一个前缀覆盖的若干TCAM条目,用“输入字符”是前缀的TCAM条目来代替。具体处理过程为:成对地、两两相邻地比较状态i的剩余的TCAM条目:如果两个相邻的TCAM条目的“到达状态”相同、而且“输入字符”的海明距离为1,即它们的“输入字符”只有1个(第k个)比特不同,那么把这两个相邻的TCAM条目删除,代之以一个新的TCAM条目,该新的TCAM条目中除了“输入字符”的第k个比特变作“*”之外,其余的7个比特保持不变。
图3中列出的前两个条目满足上述条件,它们都是图3中状态1的条目,“到达状态”都是状态2,并且它们的“输入字符”只相差最后一个比特(“00110000”和“00110001”),所以在图4中用一个新条目即第一个条目取代它们。
步骤S103、利用不同状态共享TCAM条目的方法减少存储整个DFA所需的TCAM条目数量。
通过不同状态共享TCAM条目的方法来减少不同状态共享的TCAM条目的拷贝数,从而减少存储整个DFA所需的TCAM条目数量。上述不同状态共享TCAM条目的方法包括:基于“模板”关系的共享TCAM条目和基于“状态分组”的共享TCAM条目。
步骤S104、以具体的所述出发状态和输入字符的拼接作为搜索关键词,按照所述搜索关键字在所述DFA的所有TCAM条目中进行搜索,将搜索得到的到达状态对应的正则表达式作为输出结果。
在所述用TCAM存储DFA的方法的基础上,本发明实施例又提出了用TCAM的并行查找实现基于DFA的正则表达式匹配的方法,使得状态转换可以通过TCAM的并行查找来完成,而且一次状态转换仅需要一次并行查找。
以上述DFA的当前状态作为“出发状态”,将上述“出发状态”对应的编码字符串和当前的“输入字符”对应的编码字符串拼接作为TCAM条目的搜索关键词,按照所述搜索关键字在所述DFA的所有TCAM条目中进行搜索,将搜索得到的“到达状态”作为TCAM条目的输出值,将所述搜索得到的“到达状态”对应的正则表达式作为输出结果。
图5是识别正则表达式(bd)*(ce)+和(ce)*(bd)+的DFA,其中状态4是接收规则(bd)*(ce)+的接收状态,状态5是接收规则(ce)*(bd)+的接收状态,为表示清晰,图5中省略显示所有到达状态为状态0的转移边。图6是对图5中原始的DFA应用单状态条目压缩算法、按“状态分组”对TCAM条目进行缩减、对状态号进行重编码之后得到的结果,状态号的编码方案在图7中给出。
用存储在TCAM上的DFA实现正则表达式匹配,以当前活跃状态的状态号和当前读入字符的拼接作为搜索关键词输入TCAM,TCAM返回下一跳的状态号。例如,对输入字符串ce,正则表达式匹配是如下进行的:
当前活跃状态是状态0,其状态号是“100”,以“100”拼接字符c的编码“01100011”作为搜索关键词输入TCAM,该关键词与图6中的第3个TCAM条目匹配,因此输出下一跳状态号是“010”;
当前读入字符是e,以“010”拼接字符e的编码“01100101”作为搜索关键词输入TCAM,该关键词与图6中的第2个TCAM条目匹配,因此输出下一跳状态号是“110”;
与“110”对应的是状态4,该状态是接收状态,到达该状态时匹配的正则表达式是(bd)*(ce)+,所以输入ce匹配正则表达式(bd)*(ce)+。
实施例二
本实施例提供了一种基于“模板”关系的共享TCAM条目的方法的具体处理过程包括:
定义状态i和状态j的“相似度”,用符号sim(i,j)表示,它的取值是状态i和状态j的相同的TCAM条目的数目(所谓“相同”,要求“输入字符”和“到达状态”都相同)
计算所述DFA的任意两个状态:状态i和状态j的相似度sim(i,j),当所述状态i以状态j为模板,将所述状态i和状态j的读入字符和到达状态都相同的TCAM条目从所述状态i的TCAM条目中删除,在所述DFA的所有TCAM条目列表中将所述状态i的剩下的TCAM条目排列在所述状态j的TCAM条目之前,对所述状态i和状态j对应的编码字符串进行重新设定,使所述状态j对应的编码字符串能够通配所述状态i对应的编码字符串。
比如,针对图8中状态0和状态1分别只有4个TCAM条目,按“相似度”的定义,则sim(0,1)=3。
上述“模板”关系是一种状态间的、单向的关系:比如,状态i以状态j为模板(即状态j是状态i的模板),那么在TCAM条目列表中,状态i应该存储在状态j之前;而且,状态i只需要存储它和状态j不一样的256-sim(i,j)个TCAM条目,状态j则依然要存储256个TCAM条目。如果图8中的状态0以状态1为模板,那么存储图8中的状态0和状态1这两个状态时,只需要图9所示的5个TCAM条目就够了。
针对一个完整的DFA,可以采用图论中的“最小生成树”问题来确定DFA的状态间的模板关系。上述“最小生成树”是这样构建的:构建一个带权完全图,所述带权完全图中的每个顶点代表自动状态机的一个状态,在顶点间两两地连上一条带权重的边,边的权重值是256-sim(i,j)(只有权值非零的边被标出)。根据所述带权完全图构建一个带权最小生成树,树根可以是树中任意状态,所述生成树决定了状态间的模板关系,树中的父结点就是它的所有孩子的模板状态,树根本身没有模板状态。
比如,对某个只有8个状态的DFA,假设图10是该DFA用于确定状态间的模板关系的最小生成树。图10中状态0被取作“根模板”。图10中有向边的起点状态以有向边的终点状态为模板。
上述最小生成树给出了状态间的模板关系,下一步就是按模板关系对状态号进行重新编排。遍历每一个父节点,在一个父节点处,如果它只有一个孩子,那么一个比特就足以区分孩子节点和父节点了,如果它有N(N>1)个孩子,那么为了区分这些孩子和父节点,至少需要个比特。这样每一个父节点都给它所有的孩子节点分配了一段“子编码”。树中任意状态i的编码初始为空,从树根出发到达所述状态i,将沿途所有的状态的子编码拼接起来作为状态i的编码。由于这样得到的状态编码的长度不一,需要将所有的状态编码补齐到相同的长度。取最长的编码的长度作为统一的状态编码长度,在现有的状态编码后面补齐。当状态作为源状态存储在TCAM中时,在其现有的状态编码后面补“*”,当状态作为目的状态存储在TCAM时,在其现有的状态编码后面补上补充一段尚未分配的由“0”和“1”组成的编码。
图11展示了按“层序”自底向上遍历图10中的最小生成树、对状态号进行重编码的过程。例如状态3,它只有一个孩子节点,所以它需要为孩子节点分配一个长度为的子编码,即子编码“0”。例如状态2,它有3个孩子,所以它需要依次为孩子节点分配一个长度为的子编码,即子编码“00”,“01”和“10”。最终,每个状态的编码为从根节点到该状态的子编码的拼接。例如状态3,从根节点到状态3的子编码的拼接是“000”。例如状态5,从从根节点到状态3的子编码的拼接是“0101”。最终,为统一状态编码长度,取所有状态编码中最长的编码长度4。例如状态3现有的编码是“000”,最终它作为源状态的编码是“000*”,它作为目的状态的编码是“0000”。例如状态2的现有的编码是“01”,最终它作为源状态的编码是“01**”,它作为目的状态的编码是“0111”。
实施例三
本实施例提供了一种基于“状态分组”的共享TCAM条目的方法的具体处理过程包括:
将所述DFA的所有状态构成第一层状态子集,从所述DFA的所有TCAM条目中,将读入字符和到达状态针对所有状态都相同的TCAM条目删除掉;若所述剩余的TCAM条目数不为零,则将所述第一层状态子集划分成两个或两个以上的第二层状态子集;分别从所述每一个第二层状态子集的TCAM条目中,将读入字符和到达状态针对所有状态都相同的TCAM条目删除掉;若所述第二层状态子集中剩余的TCAM条目数不为零,则将所述第二层状态子集划分成两个或两个以上的第三层状态子集;
依次类推,直到下一层次的状态子集中删去读入字符和到达状态针对所有状态都相同的TCAM条目后剩余的TCAM条目数为零,将所述下一层次的状态子集作为最底层的状态子集;
根据每个状态子集中包括的状态的个数给每个状态子集分配一定数量的比特位,利用所述一定数量的比特数对每个状态子集对应的编码字符串进行设定,并对所述DFA的每个状态对应的编码字符串进行设定;
在所述DFA的所有TCAM条目列表中,将所述每个层次的状态子集中的核心集保留下来,所述状态子集中的核心集是读入字符和到达状态针对状态子集中的所有状态都相同的TCAM条目,并将所述核心集中的出发状态修改为所述核心集所属的状态子集对应的编码字符串;
当所述状态子集i是状态子集j的子集时,所述状态子集j对应的编码字符串能够通配所述状态子集i对应的编码字符串,且在所述DFA的所有TCAM条目列表中将所述状态子集i的核心集排列在所述状态子集j的核心集之前。
比如,图12是某DFA的四个状态的TCAM条目。其中sim(4,6)=2,sim(5,7)=2。表中,通过调整状态号的编排顺序,原先需要8个TCAM条目的信息现在仅用3个TCAM条目就能记录了,如图13所示。
首先定义两个概念:“状态子集的相似度”和“核心集”。
定义状态子集的“相似度”,用符号sim(s)表示,它的取值,是状态子集s中的所有状态共有的TCAM条目的数量。比如,在图14中,sim(1,2)=2,sim(1,3)=2,sim({1,2,3})=1。虽然状态1分别和状态2、状态3共有2个TCAM条目,但这三个状态共有的TCAM条目却只有一条,即“输入字符”为“********”并且“到达状态”为状态0的条目。
定义状态子集的“核心集”,用符号core(s)表示,它是一组TCAM条目,它们是状态子集s中的所有状态所共有的TCAM条目;图14中,core({1,2,3})只包含一个TCAM条目,即“输入字符”为“********”并且“到达状态”为状态0的条目。
通过构建一棵递归划分树来对DFA的状态进行分组,此递归划分树具有如下特征:树根是DFA的所有状态的集合;树上的每一个节点记录了其状态集合的“核心集”;任意父节点的状态集合是它的所有孩子节点的状态集合的并。
上述递归划分树按如下步骤从“根″开始构建:
步骤1、把待划分的状态集合的“核心集”中的TCAM条目,从该状态集合的各状态的TCAM条目列表中删除;
步骤2、如果状态集合中所有状态都没有TCAM条目了,就到达了递归划分树的叶子节点,算法应该在此回溯(结束);否则执行下面的步骤;
步骤3、构建一个图,用顶点代表DFA的状态。在任意顶点i和顶点j之间连上一条带权边,边的权值是sim(i,j)(只有权值非零的边被标出);
步骤4、每次找出上述图中权值最大的一条边(记为max),以这条边的两个端点组成的状态子集s作为起始状态集合s,逐个的往这个起始状态集合s中加入元素(其它状态)。随着s的不断增大,sim(s)的值会逐渐减小,限制sim(s)的值不能小于阈值k,k的取值从max递减到1,阈值k每递减变化一次,就会相应得到一个状态子集s。这样本步骤将得到至多max个可能被划分出去的状态子集;
步骤5、对步骤4得到的每个状态子集si,记状态子集s的大小为|si|,计算这样一个指标值:(|si|-1)·sim(si),该指标值最大的那个状态子集就作为这次构造出来的孩子节点;
步骤6、如果当前状态集合没有被完全划分,重复上述步骤4和步骤5,否则执行下面的步骤;
步骤7、对父节点的所有孩子节点依次执行上述所有步骤。
按递归划分树对状态号进行编排的过程自底向上的进行:对每个叶子节点,如果它包含1个或者2个状态,那么这些状态需要长1比特的ID段;如果它包含的状态数是N(N>2),那么它们需要长比特的ID段。对每个父节点,假设它有k个孩子,每个孩子需要长ni比特的ID段,那么父节点需要长比特的ID段,使得从所述父节点到其任意叶子节点的任意状态,沿途经过的状态子集或状态的ID段的拼接的长度为n。
比如,图15是一个有6个状态的DFA对应的TCAM条目,图16是利用上述算法从这个DFA得到的递归划分树。具体操作如下:
所有状态共有的TCAM条目是“输入字符”为“********”并且“到达状态”为状态0的TCAM条目,把它从各状态的TCAM条目中删除。此时,用带权图表示的状态间关系如图17所示。图17中权值最大的边是状态0和状态2之间的边。令状态子集s从{0,2}开始生长,不断向状态子集s中加入元素(其它状态),但又要保证sim(s)不小于阈值k。k的取值范围是1~4,因此在k取值不同的情况下,分别从状态子集{0,2}开始生长。如图18所示,当k=4时,最终生长得到的状态子集为{0,2};当k=3时,最终生长得到的状态子集为{0,1,2};当k=2时,最终生长得到的状态子集为{0,1,2};当k=1时,最终生长得到的状态子集为{0,1,2}。指标值最大的状态子集是{0,1,2},因此我们构造一个孩子节点,其状态集合是{0,1,2}。至此,待划分的状态集合缩小为{3,4,5}。按同样的步骤,我们分别划分出{3,4}和{1}。根节点的状态集合被完全划分,下面依次对它的孩子节点进行划分。
对根的三个孩子,我们按“层序”从左到右进行划分。节点{0,1,2}的核心集有三个TCAM条目,把它们从各状态的TCAM条目中删去。此时,状态1已经没有TCAM条目了,状态0和状态2还共享一个条目,带权图如图19所示。图19中权值最大的边是状态0和状态2之间的边。阈值k只能取1,因此把状态子集{0,2}划分出去。剩下的状态1单独构成一个子集{1},因为状态1的TCAM条目被删尽了,所以该状态子集是叶子节点,算法在此停止。对剩余的节点,按同样的步骤进行划分,最终得到图20所示的递归划分树。
可以从递归划分树得到状态号重新编排的方案。对每个叶子节点,如果它包含1个或者2个状态,那么这些状态需要长1比特的ID段;如果它包含的状态数N(N>2),那么它们需要长比特的ID段。对每个父节点,假设它k个孩子,每个孩子需要长ni比特的ID段,那么父节点需要长比特的ID段,使得从所述父节点到其任意叶子节点的任意状态,沿途经过的状态子集或状态的ID段的拼接的长度为n。图20给出了这个自底向上重编码的过程,先对所有的叶子节点分配ID段,因为它们均只包含一个状态,故需长度为1的编码,分配ID段“0”,如图20的左上方的子图所示,所分配的ID段标记在叶子节点的下方;图20右上方的子图说明的是对倒数第二层的状态子集进行编码,因为它们都有两个孩子节点,且孩子节点中状态的ID段均长为1,故它们都需要分配一段长为的ID段,如节点{0,2},从它到叶子节点中的状态0的编码长度必须为2,而状态0已经分配了长度为1的ID段“0”,故节点{0,2}为其孩子节点{0}分配长度为1的ID段“0”;节点{0,2}到叶子节点中的状态2的编码长度必须为2,而状态2已经分配了长度为1的ID段“0”,故节点{0,2}需要为其孩子节点{2}分配一个长度为1的ID段,在长度为2的ID段中,“00”已经存在,故节点{0,2}为其孩子节点{2}分配ID段“1”,这样从节点{0,2}到叶子节点{2}的编码为“01”。其他状态子集的编码也按相同方式进行,最终,在根节点处完成了编码分配,从根节点到任意叶子节点的任意状态的编码长度均为4,分别为“0000”,“0010”,“0100”,“1000”,“1010”,“1110”,这些编码分别是状态0,2,1,3,4,5的编码,如图21所示。各个状态子集的编码为从根节点到该状态子集,沿途所经过的状态子集的编码的拼接,并在后面补“*”,使得编码长度和状态的编码长度一致,因此状态子集{0,1,2,3,4,5}的编码为“****”,状态子集{0,1,2}的编码为“0***”,状态子集{3,4}的编码为“10**”,状态子集{5}的编码为“110*”,状态子集{0,2}的编码为“00**”,状态子集{1}的编码为“010*”,状态子集{3}的编码为“100*”,状态子集{4}的编码为“101*”,状态子集{0}的编码为“000*”,状态子集{2}的编码为“001*”。
图21是最终的状态号编排方案。按这个方案替换表中的状态号,同时只保留递归划分树各节点的“核心集”中的条目,并且当所述状态子集i是状态子集j的子集时,在所述DFA的所有TCAM条目列表中将所述状态子集i的核心集排列在所述状态子集j的核心集之前,就得到了如图22所示的更精简的DFA的TCMA条目列表了。
实施例四
该实施例提供了一种基于TCAM的DFA的匹配装置,其具体结构如图23所示,包括如下的模块:
TCAM条目构造模块231,用于将DFA的每个状态用若干三态内容寻址存储器TCAM条目表示,每个TCAM条目由出发状态、输入字符和到达状态三个域组成,表示同一状态的TCAM条目的出发状态相同;
上述DFA可能是由正则表达式规则编译得到,也可能是由字符串规则编译得到,甚至别的任何方式得到。
搜索匹配模块232,用于以具体的所述出发状态和输入字符的拼接作为搜索关键词,按照所述搜索关键字在所述DFA的所有TCAM条目中进行搜索,将搜索得到的到达状态对应作为输出结果。
具体的,所述的其特征在于:
TCAM条目构造模块231,还用于当所述输入字符采用ASCII字符时,将所述DFA的每个状态对应256个TCAM条目,将所述出发状态和输入字符用“0”、“1”和“*”组成的字符串来表示,将所述到达状态用“0”和“1”组成的字符串来表示。
进一步地,所述的装置还可以包括:
TCAM条目缩减模块233,用于遍历所述DFA的任意状态i的所有TCAM条目,找出出现频率最高的到达状态,记为D状态,删除所述状态i的到达状态是状态D的TCAM条目,增加一个所述状态i的新的TCAM条目,所述新的TCAM条目的出发状态是状态i、输入字符是“********”、到达状态是状态D;
两两相邻地比较所述状态i的剩余的TCAM条目,如果两个相邻的TCAM条目的到达状态相同、输入字符中只有第K个比特不同,则将所述两个相邻的TCAM条目中的任一个TCAM条目的输入字符的第K个比特以“*”代替,其余的比特保持不变构成新的输入字符;
将所述两个相邻的TCAM条目删除,增加一个所述状态i的新的TCAM条目,所述新的TCAM条目的出发状态是状态i、输入字符是所述新的输入字符,到达状态是所述两个相邻的TCAM条目中的到达状态。
具体的,所述的TCAM条目缩减模块233,还用于计算所述DFA的任意两个状态:状态i和状态j的相似度,所述相似度为所述状态i和状态j的读入字符和到达状态都相同的TCAM条目的数目;
构建一个带权完全图,所述带权完全图中的顶点为所有DFA状态,所述带权完全图中边的权重为256减去该边所连通的两个状态的相似度,根据所述带权完全图构建一个带权最小生成树,树根可以是树中任意状态,所述带权最小生成树决定了状态间的模板关系,树中的父结点就是它的所有孩子的模板状态,树根本身没有模板状态;
当指定所述状态i以状态j为模板,将所述状态i和状态j的读入字符和到达状态都相同的TCAM条目从所述状态i的TCAM条目中删除,在所述DFA的所有TCAM条目列表中将所述状态i的剩下的TCAM条目排列在所述状态j的TCAM条目之前,对所述状态i和状态j对应的编码字符串进行重新设定,使所述状态j对应的编码字符串能够通配所述状态i对应的编码字符串。
具体的,所述的TCAM条目缩减模块223,还用于将所述DFA的所有状态构成第一层状态子集,从所述DFA的所有TCAM条目中,将读入字符和到达状态针对所有状态都相同的TCAM条目删除掉;
若所述剩余的TCAM条目数不为零,则将所述第一层状态子集划分成两个或两个以上的第二层状态子集;分别从所述每一个第二层状态子集的TCAM条目中,将读入字符和到达状态针对所有状态都相同的TCAM条目删除掉;若所述第二层状态子集中剩余的TCAM条目数不为零,则将所述第二层状态子集划分成两个或两个以上的第三层状态子集;
依次类推,直到下一层次的状态子集中删去读入字符和到达状态针对所有状态都相同的TCAM条目后剩余的TCAM条目数为零,将所述下一层次的状态子集作为最底层的状态子集;
根据每个状态子集中包括的状态的个数给每个状态子集分配一定数量的比特位,利用所述一定数量的比特数对每个状态子集对应的编码字符串进行设定,并对所述DFA的每个状态对应的编码字符串进行设定;
在所述DFA的所有TCAM条目列表中,将所述每个层次的每个状态子集中的核心集保留下来,所述状态子集中的核心集是读入字符和到达状态针对状态子集中的所有状态都相同的TCAM条目,并将所述核心集中的出发状态修改为所述核心集所属的状态子集对应的编码字符串;
当所述状态子集i是状态子集j的子集时,所述状态子集j对应的编码字符串能够通配所述状态子集i对应的编码字符串,且在所述DFA的所有TCAM条目列表中将所述状态子集i的核心集排列在所述状态子集j的核心集之前。应用本发明实施例的装置进行DFA匹配的具体处理过程与前述方法实施例类似,此处不再赘述。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random Access Memory,RAM)等。
综上所述,本发明实施例通过将正则表达式等构造的DFA的每个状态用若干TCAM条目表示,利用单状态条目压缩算法来减少存储单个状态所需的TCAM条目数量,利用不同状态共享TCAM条目、共享状态转换的方法大大减少了存储整个DFA所需的TCAM条目数量。同时,还利用TCAM能存储“不关心”状态的特点,进一步减少存储DFA所需的TCAM条目数量,从而减小了存储一个DFA需要的内存空间,降低了DFA的体量。
本发明实施例可以实现DFA的一次状态转换仅需要一次TCAM条目并行查找就能完成,从而提高了DFA的匹配的速度,进而可以提高基于DFA的正则表达式匹配的速度。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。
Claims (10)
1.一种基于TCAM的确定性有穷状态自动机的匹配方法,其特征在于,包括:
将确定性有穷状态自动机DFA的每个状态用若干三态内容寻址存储器TCAM条目表示,每个TCAM条目由出发状态、输入字符和到达状态三个域组成,表示同一状态的TCAM条目的出发状态相同;
以具体的所述出发状态和输入字符的拼接作为搜索关键词,按照所述搜索关键字在所述DFA的所有TCAM条目中进行搜索,将搜索得到的到达状态作为输出结果。
2.根据权利要求1所述的基于TCAM的确定性有穷状态自动机的匹配方法,其特征在于:
当所述输入字符采用ASCII字符时,所述DFA的每个状态对应256个TCAM条目,所述出发状态和输入字符为“0”、“1”和“*”组成的字符串,所述到达状态为“0”和“1”组成的字符串。
3.根据权利要求1或2所述的基于TCAM的确定性有穷状态自动机的匹配方法,其特征在于,所述的方法还包括:
遍历所述DFA的任意状态i的所有TCAM条目,找出出现频率最高的到达状态,记为D状态,删除所述状态i的到达状态是状态D的TCAM条目,增加一个所述状态i的新的TCAM条目,所述新的TCAM条目的出发状态是状态i、输入字符是“********”、到达状态是状态D;
两两相邻地比较所述状态i的剩余的TCAM条目,如果两个相邻的TCAM条目的到达状态相同、输入字符中只有第K个比特不同,则将所述两个相邻的TCAM条目中的任一个TCAM条目的输入字符的第K个比特以“*”代替,其余的比特保持不变构成新的输入字符;
将所述两个相邻的TCAM条目删除,增加一个所述状态i的新的TCAM条目,所述新的TCAM条目的出发状态是状态i、输入字符是所述新的输入字符,到达状态是所述两个相邻的TCAM条目中的到达状态。
4.根据权利要求1或2所述的基于TCAM的确定性有穷状态自动机的匹配方法,其特征在于,所述的方法还包括:
计算所述DFA的任意两个状态:状态i和状态j的相似度,所述相似度为所述状态i和状态j的读入字符和到达状态都相同的TCAM条目的数目;
构建一个带权完全图,所述带权完全图中的顶点为所有DFA状态,所述带权完全图中边的权重为256减去该边所连通的两个状态的相似度,根据所述带权完全图构建一个带权最小生成树,树根可以是树中任意状态,所述带权最小生成树决定了状态间的模板关系,树中的父结点就是它的所有孩子的模板状态,树根本身没有模板状态;
当指定所述状态i以状态j为模板,将所述状态i和状态j的读入字符和到达状态都相同的TCAM条目从所述状态i的TCAM条目中删除,在所述DFA的所有TCAM条目列表中将所述状态i的剩下的TCAM条目排列在所述状态j的TCAM条目之前,对所述状态i和状态j对应的编码字符串进行重新设定,使所述状态j对应的编码字符串能够通配所述状态i对应的编码字符串。
5.根据权利要求1或2所述的基于TCAM的确定性有穷状态自动机的匹配方法,其特征在于,所述的方法还包括:
将所述DFA的所有状态构成第一层状态子集,从所述DFA的所有TCAM条目中,将读入字符和到达状态针对所有状态都相同的TCAM条目删除掉;若所述剩余的TCAM条目数不为零,则将所述第一层状态子集划分成两个或两个以上的第二层状态子集;分别从每一个所述第二层状态子集的TCAM条目中,将读入字符和到达状态针对所有状态都相同的TCAM条目删除掉;若所述第二层状态子集中剩余的TCAM条目数不为零,则将所述第二层状态子集划分成两个或两个以上的第三层状态子集;
依次类推,直到下一层次的状态子集中删去读入字符和到达状态针对所有状态都相同的TCAM条目后剩余的TCAM条目数为零,将所述下一层次的状态子集作为最底层的状态子集;
根据每个状态子集中包括的状态的个数给每个状态子集分配一定数量的比特位,利用所述一定数量的比特数对每个状态子集对应的编码字符串进行设定,并对所述DFA的每个状态对应的编码字符串进行设定;
在所述DFA的所有TCAM条目列表中,将所述每个层次的每个状态子集中的核心集保留下来,所述状态子集中的核心集是读入字符和到达状态针对状态子集中的所有状态都相同的TCAM条目,并将所述核心集中的出发状态修改为所述核心集所属的状态子集对应的编码字符串;
当所述状态子集i是状态子集j的子集时,所述状态子集j对应的编码字符串能够通配所述状态子集i对应的编码字符串,且在所述DFA的所有TCAM条目列表中将所述状态子集i的核心集排列在所述状态子集j的核心集之前。
6.一种基于TCAM的确定性有穷状态自动机的匹配装置,其特征在于,包括:
TCAM条目构造模块,用于将确定性有穷状态自动机DFA的每个状态用若干三态内容寻址存储器TCAM条目表示,每个TCAM条目由出发状态、输入字符和到达状态三个域组成,表示同一状态的TCAM条目的出发状态相同;
搜索匹配模块,用于以具体的所述出发状态和输入字符的拼接作为搜索关键词,按照所述搜索关键字在所述DFA的所有TCAM条目中进行搜索,将搜索得到的到达状态作为输出结果。
7.根据权利要求6所述的基于TCAM的确定性有穷状态自动机的匹配装置,其特征在于:
TCAM条目构造模块,还用于当所述输入字符采用ASCII字符时,将所述DFA的每个状态对应256个TCAM条目,将所述出发状态和输入字符用“0”、“1”和“*”组成的字符串来表示,将所述到达状态用“0”和“1”组成的字符串来表示。
8.根据权利要求6或7所述的基于TCAM的确定性有穷状态自动机的匹配装置,其特征在于,所述的装置还包括:
TCAM条目缩减模块,用于遍历所述DFA的任意状态i的所有TCAM条目,找出出现频率最高的到达状态,记为D状态,删除所述状态i的到达状态是状态D的TCAM条目,增加一个所述状态i的新的TCAM条目,所述新的TCAM条目的出发状态是状态i、输入字符是“********”、到达状态是状态D;
两两相邻地比较所述状态i的剩余的TCAM条目,如果两个相邻的TCAM条目的到达状态相同、输入字符中只有第K个比特不同,则将所述两个相邻的TCAM条目中的任一个TCAM条目的输入字符的第K个比特以“*”代替,其余的比特保持不变构成新的输入字符;
将所述两个相邻的TCAM条目删除,增加一个所述状态i的新的TCAM条目,所述新的TCAM条目的出发状态是状态i、输入字符是所述新的输入字符,到达状态是所述两个相邻的TCAM条目中的到达状态。
9.根据权利要求1或2所述的基于TCAM的确定性有穷状态自动机的匹配装置,其特征在于:
所述的TCAM条目缩减模块,还用于计算所述DFA的任意两个状态:状态i和状态j的相似度,所述相似度为所述状态i和状态j的读入字符和到达状态都相同的TCAM条目的数目;
构建一个带权完全图,所述带权完全图中的顶点为所有DFA状态,所述带权完全图中边的权重为256减去该边所连通的两个状态的相似度,根据所述带权完全图构建一个带权最小生成树,树根可以是树中任意状态,所述带权最小生成树决定了状态间的模板关系,树中的父结点就是它的所有孩子的模板状态,树根本身没有模板状态;
当指定所述状态i以状态j为模板,将所述状态i和状态j的读入字符和到达状态都相同的TCAM条目从所述状态i的TCAM条目中删除,在所述DFA的所有TCAM条目列表中将所述状态i的剩下的TCAM条目排列在所述状态j的TCAM条目之前,对所述状态i和状态j对应的编码字符串进行重新设定,使所述状态j对应的编码字符串能够通配所述状态i对应的编码字符串。
10.根据权利要求1或2所述的基于TCAM的确定性有穷状态自动机的匹配装置,其特征在于:
所述的TCAM条目缩减模块,还用于将所述DFA的所有状态构成第一层状态子集,从所述DFA的所有TCAM条目中,将读入字符和到达状态针对所有状态都相同的TCAM条目删除掉;若所述剩余的TCAM条目数不为零,则将所述第一层状态子集划分成两个或两个以上的第二层状态子集;分别从每一个所述第二层状态子集的TCAM条目中,将读入字符和到达状态针对所有状态都相同的TCAM条目删除掉;若所述第二层状态子集中剩余的TCAM条目数不为零,则将所述第二层状态子集划分成两个或两个以上的第三层状态子集;
依次类推,直到下一层次的状态子集中删去读入字符和到达状态针对所有状态都相同的TCAM条目后剩余的TCAM条目数为零,将所述下一层次的状态子集作为最底层的状态子集;
根据每个状态子集中包括的状态的个数给每个状态子集分配一定数量的比特位,利用所述一定数量的比特数对每个状态子集对应的编码字符串进行设定,并对所述DFA的每个状态对应的编码字符串进行设定;
在所述DFA的所有TCAM条目列表中,将所述每个层次的每个状态子集中的核心集保留下来,所述状态子集中的核心集是读入字符和到达状态针对状态子集中的所有状态都相同的TCAM条目,并将所述核心集中的出发状态修改为所述核心集所属的状态子集对应的编码字符串;当所述状态子集i是状态子集j的子集时,所述状态子集j对应的编码字符串能够通配所述状态子集i对应的编码字符串,且在所述DFA的所有TCAM条目列表中将所述状态子集i的核心集排列在所述状态子集j的核心集之前。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110451648.7A CN102591958B (zh) | 2011-12-29 | 2011-12-29 | 基于tcam的确定性有穷状态自动机的匹配方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110451648.7A CN102591958B (zh) | 2011-12-29 | 2011-12-29 | 基于tcam的确定性有穷状态自动机的匹配方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102591958A true CN102591958A (zh) | 2012-07-18 |
CN102591958B CN102591958B (zh) | 2014-01-01 |
Family
ID=46480596
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110451648.7A Expired - Fee Related CN102591958B (zh) | 2011-12-29 | 2011-12-29 | 基于tcam的确定性有穷状态自动机的匹配方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102591958B (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104901947A (zh) * | 2015-04-13 | 2015-09-09 | 国家计算机网络与信息安全管理中心 | 一种基于tcam连续数值匹配方法和装置 |
CN105516006A (zh) * | 2015-11-25 | 2016-04-20 | 英业达科技有限公司 | 流量条目聚合方法及相关的网络系统 |
CN106708532A (zh) * | 2016-12-30 | 2017-05-24 | 中国人民解放军国防科学技术大学 | 基于tacm的多层次正则表达式匹配方法 |
CN110546640A (zh) * | 2017-04-25 | 2019-12-06 | 华为技术有限公司 | 用于深度数据包分析的分级模式匹配 |
CN112069307A (zh) * | 2020-08-25 | 2020-12-11 | 中国人民大学 | 一种法律法条引用信息抽取系统 |
CN113656212A (zh) * | 2020-05-12 | 2021-11-16 | 慧与发展有限责任合伙企业 | 用于缓存目录tcam错误检测和纠正的系统和方法 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102156748A (zh) * | 2011-04-22 | 2011-08-17 | 湖南大学 | 基于字母表压缩的扩展有限自动机构造方法 |
-
2011
- 2011-12-29 CN CN201110451648.7A patent/CN102591958B/zh not_active Expired - Fee Related
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102156748A (zh) * | 2011-04-22 | 2011-08-17 | 湖南大学 | 基于字母表压缩的扩展有限自动机构造方法 |
Non-Patent Citations (2)
Title |
---|
KUNYANG PENG等: "Chain-Based DFA Deflation for Fast and Scalable Regular Expression Matching Using TCAM", 《ARCHITECTURES FOR NETWORKING AND COMMUNICATIONS SYSTEMS (ANCS), 2011 SEVENTH ACM/IEEE SYMPOSIUM ON》 * |
KUNYANG PENG等: "TCAM-based DFA deflation a novel approach to fast and scalable regular expression matching", 《QUALITY OF SERVICE (IWQOS), 2011 IEEE 19TH INTERNATIONAL WORKSHOP ON》 * |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104901947A (zh) * | 2015-04-13 | 2015-09-09 | 国家计算机网络与信息安全管理中心 | 一种基于tcam连续数值匹配方法和装置 |
CN104901947B (zh) * | 2015-04-13 | 2017-11-24 | 国家计算机网络与信息安全管理中心 | 一种基于tcam连续数值匹配方法和装置 |
CN105516006A (zh) * | 2015-11-25 | 2016-04-20 | 英业达科技有限公司 | 流量条目聚合方法及相关的网络系统 |
CN106708532A (zh) * | 2016-12-30 | 2017-05-24 | 中国人民解放军国防科学技术大学 | 基于tacm的多层次正则表达式匹配方法 |
CN106708532B (zh) * | 2016-12-30 | 2020-12-04 | 中国人民解放军国防科学技术大学 | 基于tcam的多层次正则表达式匹配方法 |
CN110546640A (zh) * | 2017-04-25 | 2019-12-06 | 华为技术有限公司 | 用于深度数据包分析的分级模式匹配 |
CN110546640B (zh) * | 2017-04-25 | 2021-09-07 | 华为技术有限公司 | 用于深度数据包分析的分级模式匹配 |
CN113656212A (zh) * | 2020-05-12 | 2021-11-16 | 慧与发展有限责任合伙企业 | 用于缓存目录tcam错误检测和纠正的系统和方法 |
CN113656212B (zh) * | 2020-05-12 | 2022-08-02 | 慧与发展有限责任合伙企业 | 用于缓存目录tcam错误检测和纠正的系统和方法 |
CN112069307A (zh) * | 2020-08-25 | 2020-12-11 | 中国人民大学 | 一种法律法条引用信息抽取系统 |
Also Published As
Publication number | Publication date |
---|---|
CN102591958B (zh) | 2014-01-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102591958B (zh) | 基于tcam的确定性有穷状态自动机的匹配方法和装置 | |
Akiba et al. | Fast shortest-path distance queries on road networks by pruned highway labeling | |
CN109952568B (zh) | 用于高速搜索或过滤大数据集的系统和方法 | |
CN106797446B (zh) | 基于存储器的历史搜索 | |
JP5858432B2 (ja) | 分散連想メモリベースを提供する方法、システム、及びコンピュータプログラム製品 | |
US8255398B2 (en) | Compression of sorted value indexes using common prefixes | |
CN100468402C (zh) | 一种数据存储及查询方法 | |
CN102646130B (zh) | 一种海量历史数据的存储及索引方法 | |
EP1360616B1 (en) | Database system and query optimiser | |
CN107153647B (zh) | 进行数据压缩的方法、装置、系统和计算机程序产品 | |
JP4527753B2 (ja) | ビット列検索装置、検索方法及びプログラム | |
US20070294221A1 (en) | Designing record matching queries utilizing examples | |
WO2012082859A1 (en) | High efficiency prefix search algorithm supporting interactive, fuzzy search on geographical structured data | |
CN102016789A (zh) | 数据处理装置和处理数据的方法 | |
CN106021523A (zh) | 基于json的数据仓库存储及查询方法 | |
CN101963944A (zh) | 对象存储方法和系统 | |
CN108829880A (zh) | 一种光网络终端设备的配置管理的方法 | |
US20070094313A1 (en) | Architecture and method for efficient bulk loading of a PATRICIA trie | |
CN103299297A (zh) | 文件目录存储方法、检索方法和设备 | |
CN105408893B (zh) | 一种数据处理和写入方法及相关装置 | |
CN109684418A (zh) | 基于电网图数据库的数据存储方法及装置 | |
Balaji et al. | Distributed graph path queries using spark | |
CN105302889B (zh) | 数据存储结构的转换方法及装置 | |
CN101609331A (zh) | 一种适用于工业过程控制中的数据存储和读取方法 | |
CN103294735A (zh) | 基于tcam的确定性有穷状态自动机dfa的匹配方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20140101 Termination date: 20191229 |