他们怎么知道您的用户名已经很快了?
#redis #systemdesign #bloomfilters #scalablearchitecture

一些网站如何立即告诉您您的用户名已经在使用?他们如何从磁盘中搜索您的用户名?魔术是一种有效的数据结构,称为bloom滤波器。

Bloom过滤器是一种用于测试元素是否是集合的空间概率数据结构。它通常用于减少通过完全避免磁盘访问来检查元素是否在集合中所需的磁盘I/O操作数量。在此博客中,我们将探讨Bloom过滤器的内部运作,如何使用它们,这种强大的数据结构的优势和局限性。

Bloom Filter Pattern | Redis

实施详细信息:

  • Bloom过滤器被实现为有点数组,其中包含一组哈希函数,将元素映射到位数组中的索引。
  • 当将元素添加到集合中时,将哈希函数应用于元素,并且位数组中的相应位设置为1。
  • 在测试元素的成员时,将哈希函数应用于元素,并检查位数组中的相应位。
  • 如果将所有位设置为1,则该元素可能在集合中。否则,绝对不在集合中。

Bloom过滤器的主要优点是它们允许快速有效的会员测试,而无需磁盘I/O操作。这对于需要大型集合并且需要快速和频繁测试的应用程序尤其重要。 Bloom过滤器的另一个优点是,它们可以以低的误报率来实现,这是Bloom滤波器返回元素实际上不在集合中的速率。

应用程序:

BLOOM过滤器的主要应用之一是在分布式系统的字段中,用于减少节点之间的网络请求数量。例如,如果一个节点需要检查一个元素是否在集合中,则可以先检查其本地BLOOM过滤器,然后再将请求发送到另一个节点。这可以大大减少网络请求的数量并提高整体系统性能。

Bloom过滤器的另一种应用是在网络安全中,它们用于检测恶意流量。例如,可以使用Bloom过滤器来维护已知的恶意IP地址的列表,并在列表中测试传入的流量以检测恶意流量。这种方法比在已知的恶意IP地址列表中检查每个传入的IP地址的效率要高得多,因为假阳性结果的数量保持在最低限度。

Bloom过滤器也可以在其他领域使用,例如拼写检查,数据库索引,用户名可用性测试和文本索引。

限制:

Bloom过滤器的主要局限性之一是它们的能力有限。随着集合中的元素数量的增长,误报率的增加,最终达到了Bloom滤波器变得越来越小的帮助。但是,这可以通过增加位数组的大小或使用更多哈希功能来减轻这一点,尽管这将增加Bloom滤波器所需的内存量。

您也可以在Redis中利用这一点。要了解更多信息,请查看此link。最初发表在medium