Page 438 - 《软件学报》2025年第7期
P. 438

李猛 等: 代价敏感的指纹可变哈希布谷鸟过滤器                                                         3359


                 filter) [18] 由于更加优秀的性能, 近些年被越来越多的采用        [4,7,14,16,19−23] . 例如, 在数据挖掘中, 它被用于过滤掉不必要
                 的候选数据, 以提高数据挖掘效率; 在网络过滤中, 它被用于过滤掉不必要的流量, 以提高网络访问请求的性能; 在
                 数据库查询中, 它被用于过滤掉不必要的记录, 以减少昂贵的磁盘查询操作. 布谷鸟过滤器是一种基于哈希表的数
                 据结构, 它保证了插入和查询操作的时间复杂度都为                 O(1). 布谷鸟过滤器的基本原理是将元素映射到哈希表的两
                 个位置, 并将这些元素的指纹存储在其中一个哈希桶中. 当需要查询一个元素是否在集合中时, 布谷鸟过滤器会检
                 查哈希表中对应的桶中是否存在该元素的指纹. 如果存在, 那么该元素在集合中; 否则, 该元素就不在集合中. 需要
                 注意的是, 由于哈希表中存储的是元素的指纹而非元素本身, 布谷鸟过滤器会有一定的误判率, 也就是会将未存储
                 在过滤器内的元素误判为在过滤器内. 但是, 传统的布谷鸟在设计时假设每个元素出现的次数或者误判的代价是
                 均匀的. 因此, 当查询元素的频率非均匀甚至非常倾斜时, 过滤器的误判率会增大. 例如, 如果一个元素                             A  重复了
                 1 000  次, 而另一个元素  B  只出现了   1  次, 那么误判元素    A  带来的误判代价就会更大. 为了更好地解释这个问题,
                 本文给出两个实际系统中的例子.
                    案例  1. 如图  1(a) 所示, 在数据中心网络多播中, 一些最新的研究工作              [9] 提出将转发路径或端口存进过滤器.
                 然后, 在数据包转发过程中, 交换机会检查某个端口是否在过滤器中, 以决定是否将数据包转发至该端口. 然而, 由
                 于过滤器的误判, 这些数据包可能会被错误地转发至一些额外的端口, 从而导致网络带宽的浪费和占用. 尽管存在
                                                                             P 4  端口连接了更多的网络端口        (
                 误判, 但错误地转发至不同端口所造成的网络带宽占用是不同的. 例如, 由于                                                P 6
                 和   P 7 ), 因此错误地将流量转发至   P 4  端口会比错误地转发至      P 8  端口带来更多的网络带宽占用.


                        转发路径      无关路径
                      P 1
                           过滤器 数据                                      黑名单过滤器
                      P 2
                                                 P 6      H 2
                                P 1       P 4                                   放行安全访问
                        P 3   H 1      S 1     S 4             访问请求
                                 P 2             P 7
                               P 3
                                                          H 3
                       过滤器 数据
                                 S 3              P 8
                                               S 2        H 4     拦截危险访问
                    编码 P 2 , P 3 , P 5  P 5       P 9
                                        H 6
                              过滤器 数据          过滤器 数据
                         P 9
                                                          H 5
                                 P 5          P 8  P 9
                          (a) 网络多播中利用过滤器实现数据包转发                    (b) 网络入侵检测系统快速判定恶意网络流量
                                         图 1 不同元素遭遇过滤器误判带来的代价不相同

                    案例  2. 如图  1(b) 所示, 网络入侵检测系统     [24] 在检测网络访问请求时, 为了提高检测速度, 会将黑名单内的                IP
                 地址编码进过滤器, 从而能快速判断恶意网络流量. 然而, 一个明显的问题是, 一些正常的网络流量被误判后, 也必
                 须经过额外的检查过程, 这必然降低正常访问的速度. 特别是, 一些重要的访问请求或常用应用的流量一旦被误
                 判, 整体的延迟就会大大增加.
                    考虑到布谷鸟过滤器的优秀性能和丰富的操作, 已有许多基于布谷鸟过滤器的研究, 例如提升布谷鸟过滤器
                 的性能  [19,25] ; 增加更多的功能, 如支持扩容    [20,26] 和支持数据库中复杂的操作符      [14] . 然而, 这些研究都忽略了查询元
                 素集合在一些网络应用中是可以获取的. 这里的查询集合是指在查询过程中的负元素                              (即不在过滤器内的元素)
                 的信息是可以获取的, 且这些元素在被过滤器误判时的代价并不相同. 据我们所知, 目前还没有布谷鸟过滤器的设
                 计考虑到元素误判代价的不同. 最相关的研究是                Xie 等人  [27] 提出的一种基于布隆过滤器的变种        HABF, 但由于布
                 谷鸟过滤器和布隆过滤器的结构和操作均不相同, 因此无法直接将                      HABF  的方法应用过来.
                    对于构建代价敏感的布谷鸟过滤器问题, 主要挑战有以下两点: (1) 布谷鸟过滤元素主要通过随机哈希实现,
                 所以很难直接控制哈希函数值来避免某个元素误判; (2) 过滤器设计中加入的复杂操作会大幅降低过滤器查询速
                 度, 限制布谷鸟过滤器的应用场景.
                    针对上述问题, 本文提出了一种基于指纹可变哈希布谷鸟过滤器                       (variable hashing-fingerprint cuckoo filter,
   433   434   435   436   437   438   439   440   441   442   443