本文提出了简洁Succinct Range Filter(SuRF),一种用于近似隶属度测试的快速而紧凑的数据结构。与传统的布隆过滤器不同,SuRF既支持单键查找,也支持常见的范围查询:开放范围查询、封闭范围查询和范围计数。SuRF基于一种新的数据结构——快速简洁的Trie (FastSuccinct Trie, FST),它与最新的保序索引的点和范围查询性能相匹配,而每个Trie节点只消耗10比特。SuRF算法中点查询和范围查询的误报率都是可调的,以满足不同的应用需求。评估了RocksDB中的SuRF,将其作为布隆过滤器的替代,通过在访问磁盘数据结构之前过滤请求来减少I/O。在100 GB数据集上的实验表明,用surf替换RocksDB的布隆过滤器,可以将open-seek(无上界)和closed-seek(有上界)查询速度分别提高1.5倍和5倍,而由于略高的误报率,在最坏情况下(全缺失)点查询吞吐量的代价并不大。
2 FAST SUCCINCT TRIES
SuRF的核心数据结构是FST。它是一个节省空间的静态trie,可以回答点和范围查询。
FST的设计是基于这样的观察:trie的上层包含少量节点,但会引起许多访问。较低的层次包含了大多数节点,但相对“冷”一些。因此,我们使用快速的基于位图的编码方案(loud - dense)对上层进行编码,其中子节点搜索只需要一次数组查找,选择了性能而不是空间。我们使用空间高效