基于商过滤器的并发可扩展 AMQ
数据结构与算法
2019-11-20 v1
摘要
商过滤器是一种缓存高效的 AMQ 数据结构。取决于过滤器的填充程度,大多数插入与查询只需访问一或两条连续缓存行。这使得商过滤器比更常用的、会产生多次缓存缺失的 Bloom 过滤器更快。然而,并发 Bloom 过滤器易于实现且可实现无锁,而并发商过滤器则没那么简单。通常并发商过滤器通过使用外部锁数组——每个锁保护表的一个区域——来工作。访问该数组每次操作会带来一次额外的缓存缺失。我们提出一种无内存开销的新锁方案。使用这一新锁方案,我们实现了比常见外部锁方案高 1.8 倍的加速。商过滤器相对于 Bloom 过滤器的另一优势是,商过滤器在变满时可改变其大小。我们为并发商过滤器实现了这一增长技术,并对其进行适配,使得在保持有界假阳性率的同时允许无界增长。我们将所得数据结构称为完全可扩展商过滤器。其设计类似于可扩展 Bloom 过滤器,但我们利用商过滤器固有的一些概念来改进空间效率与查询速度。我们还提出旨在减少状态位数量(2-状态位变体)或简化并发实现(线性探测商过滤器)的商过滤器变体。线性探测商过滤器甚至带来了无锁并发过滤器实现。这尤其有趣,因为我们表明,任何其他常见商过滤器变体的无锁实现都会以额外数据字段或多遍访问所处理数据的形式带来显著开销。
引用
@article{arxiv.1911.08374,
title = {Concurrent Expandable AMQs on the Basis of Quotient Filters},
author = {Tobias Maier and Peter Sanders and Robert Williger},
journal= {arXiv preprint arXiv:1911.08374},
year = {2019}
}