基于索引和位图构建的高性能数据报匹配结构
2015-03-21 19:55
232 查看
写了两篇命题作文后,一发不可收拾了...要北京出差,走之前再搞两篇!(写于2015/03/21晚,次日进京)
我在描述数据包分类Dimension
Tree结构的时候,大量使用了二叉树结构,这就意味着我必须不断的左拐右拐,而到底哪里拐,免不了的是比较。我需要免除比较操作,这怎么可能?当然有可
能,空间换时间。并且,空间占用不能太大,以利于Cache的利用率。于是我想到了索引,就是类似MMU页表那样的。不可避免地,我再次遇到了空间复杂度
的问题...
这几乎就是Dimension Tree并行模式的内部实现,而且特别适合硬件实现,它足够规则和简单。
非常直观,以至于没必要解释什么!然而这个结构是如何构建的呢?位图的构建非常简单,不必多讲,关键是索引表的构建,也不难,按照区间分割情况一个一个将
65535个表项填充,就像构建页目录,页表那样。然而值得解释的是,这里的每个匹配域只有16bit,如果再多的话,占用内存将会疯涨!比如如何匹配
32bit的IP地址!这确实是一个问题。
虽然这个结构只能匹配16bit的域大于16bit将会造成巨量内存占用...),但是它包含了很多的思想。其中最重要的就是,数据如何通过第三张表来进
行压缩,即实现数据共享,这好像是数据库的范畴,但是思想是普遍的。如果解决了这个问题,我几乎就可以设计出一个新的IPv4路由查找表的结构了。我真的
设计出了,但这是下一篇文章的内容。
我在描述数据包分类Dimension
Tree结构的时候,大量使用了二叉树结构,这就意味着我必须不断的左拐右拐,而到底哪里拐,免不了的是比较。我需要免除比较操作,这怎么可能?当然有可
能,空间换时间。并且,空间占用不能太大,以利于Cache的利用率。于是我想到了索引,就是类似MMU页表那样的。不可避免地,我再次遇到了空间复杂度
的问题...
区间/规则转为位图
如果能够直接索引区间,那么区间就可以用数组表示,进而,该区间上覆盖的规则则可以是一个位图,对于16bit的域来讲,直接做索引也不过2^16条索引项,每个索引项指向一个索引,即区间数组下标。整个结构如下图所示:这几乎就是Dimension Tree并行模式的内部实现,而且特别适合硬件实现,它足够规则和简单。
非常直观,以至于没必要解释什么!然而这个结构是如何构建的呢?位图的构建非常简单,不必多讲,关键是索引表的构建,也不难,按照区间分割情况一个一个将
65535个表项填充,就像构建页目录,页表那样。然而值得解释的是,这里的每个匹配域只有16bit,如果再多的话,占用内存将会疯涨!比如如何匹配
32bit的IP地址!这确实是一个问题。
32位IP地址的匹配
这是我一直考虑的问题,而在近日,我找到了方案!这要归功于我发现了上面的索引/位图匹配结构。虽然这个结构只能匹配16bit的域大于16bit将会造成巨量内存占用...),但是它包含了很多的思想。其中最重要的就是,数据如何通过第三张表来进
行压缩,即实现数据共享,这好像是数据库的范畴,但是思想是普遍的。如果解决了这个问题,我几乎就可以设计出一个新的IPv4路由查找表的结构了。我真的
设计出了,但这是下一篇文章的内容。
相关文章推荐
- 基于索引和位图构建的高性能数据报匹配结构
- 基于CentOS构建高性能的LAMP平台.
- 插件式软件结构设计(一):构建基于插件式软件平台
- 基于MINA构建简单高性能的NIO应用-前言
- 基于开源软件构建高性能集群NAS系统
- 基于哈希表构建高效 矩阵存储结构--矩阵的一种存储方法 哈希矩阵。
- 各种索引的结构分析 降序索引和位图索引
- 基于MINA构建简单高性能的NIO应用-优化指南
- 基于CentOS构建高性能的LAMP平台
- 基于CentOS构建高性能的LAMP平台
- 基于MINA构建简单高性能的NIO应用
- 基于CentOS构建高性能的LAMP平台
- 位图索引结构
- 《海量数据库解决方案》之位图索引的结构和特征
- 基于MINA构建简单高性能的NIO应用
- 插件式软件结构设计(二):构建基于DSkinLite的界面解决方案
- 插件式软件结构设计(二):构建基于DSkinLite的界面解决方案
- 基于CentOS构建高性能的LAMP平台
- 基于MINA构建简单高性能的NIO应用-MINA架构
- 基于树的索引结构介绍