平时会接触到数据库的拆分,文件的拆分等等
拆分后,如何快速定位信息,找到包含某信息的分段
比如要查找 id=xxx 的记录,怎么知道它在哪个表里
1. 最简单的方法是在每一个表中找一遍
2. 最有效的方法是,按 id 特征分配到特定表里。比如分10个表,其中table[i]中存的都是 id % 10 == i 的元素,这时当一个 id 到来时,只要到 table[id % 10] 中找即可。
以上两种方法都能解决一开始提出的需求。但是,方法一显然效率低下;方法二灵活性差,如果查找 name=xxx 的记录,又不知道在哪个表里了。
Bloom Filter 建立的索引,消耗极少的存储空间,花费O(1)的时间复杂,就能判断某个元素是否在集合中。
“我们总能找到一个时间换空间或空间换时间的方法解决问题”
Bloom Filter 能把时间空间都缩小?
它牺牲的是“判断的准确率”
Bloom Filter 可能把不包含的元素误判为包含,但不会把包含的元素误判为不包含。
因此它非常适合做分库、分文件后的路由查找。当出现误判时,就是进入集合中执行一番无效的查找
记元素总量是 n 个,Bloom Filter 占用空间 m bit
错误率是 (xxx)^(n/m) 具体忘了,反正 m = 10n 时,只有0.8xx%
Bloom Filter 资料也挺多的,原理不难,实现也容易
分享到:
相关推荐
3. **副本定位**:在分布式系统中,使用Bloom Filter可以帮助快速查找数据的副本位置,提高数据访问效率。 4. **数据库优化**:在数据库中,Bloom Filter可以用来快速过滤掉不存在的数据项,从而减少磁盘I/O操作次数...
Bloom Filter的核心思想是在初始化时使用一个位数组和多个独立的哈希函数,当一个元素加入集合时,该元素会通过多个哈希函数映射到位数组中的不同位置,并将这些位置标记为“已存在”。 ##### 2. 工作原理 - **...
计数Bloom Filter通过跟踪每个桶的计数,从而允许元素的删除,这使得它在需要动态更新数据集的场景中变得更有用。 本文提出的方法是利用计数Bloom Filter辅助Trie结构进行最长前缀匹配的IP地址查找,该方法可以在...
- **缓存**:在内存有限的情况下,快速判断一个元素是否在大集合中。 - **搜索引擎**:快速过滤掉不存在的网页。 - **分布式系统**:在多节点之间高效地共享状态信息。 - **去重**:如在推荐系统中,避免向用户推荐...
由于布隆过滤器可能会产生假阳性(误判一个元素存在于集合中),但不会产生假阴性(误判一个元素不存在于集合中),因此在处理大规模数据时,它比传统数据结构更为高效。 RedisBloom模块为Redis提供了以下主要功能...
该技术主要应用于URL过滤系统、Web缓存等网络系统中,目的是为了在包含大量URL的集合中快速定位URL或者URL的最长前缀。由于互联网的迅速发展,数据量急剧增加,对URL查找速度的要求也随之提高。同时,随着数据量的...
在处理海量数据时,Bloom Filter是一种非常高效的数据结构,主要用于判断一个元素是否在一个集合中,具有空间效率高和查询速度快的特点。它通过将元素映射到一个位数组中来实现这一点。 1. **原理介绍**:Bloom ...
2. **基于Bloom过滤器的优化**:Bloom过滤器是一种概率型数据结构,主要用于判断一个元素是否在一个集合中。它可以通过减少不必要的磁盘I/O操作来加速查询过程。 3. **倒排索引**:倒排索引是一种特殊的索引结构,...
Bloom Filter是一种空间效率很高的概率型数据结构,它可以用来快速检测一个元素是否在一个集合中,通过判断某个IP地址是否存在于Bloom Filter中来实现对恶意流量的阻断。 文章还提到了对实际骨干网流量数据的测试...
Bloom Filter算法则是一种空间效率极高的概率型数据结构,用于测试一个元素是否在一个集合中。虽然它可能会产生误报(false positive),但不会出现漏报(false negative)。Bloom Filter通过多个独立的哈希函数将...
3. **Bloom filter/Bitmap**:用于高效地判断一个元素是否存在于集合中,节省空间。 4. **Trie树/数据库/倒排索引**:用于快速查找和数据组织,提高查询效率。 5. **外排序**:处理无法一次性加载到内存的大型文件...
Bloom Filter是一种空间效率极高的概率型数据结构,主要用于判断一个元素是否在一个集合中。其核心是利用位数组和多个独立的哈希函数。当元素被加入时,通过哈希函数计算得到位数组中的多个位置,并将这些位置标记为...
BloomFilter是一种空间效率高的概率型数据结构,用于快速判断一个元素是否在一个集合中。它利用位数组(bit array)和多个哈希函数来检测一个元素是否存在。由于BloomFilter可能会产生误判,所以它是一种近似算法。 ...
在文件定位过程中,通过对比节点间的Bloom Filter,可以快速判断文件可能存在于哪个节点。 当不确定算法无法定位文件时,会切换到确定算法,这类似于Pastry的路由算法,通过后缀匹配将请求导向ID最接近的目标节点。...
- Bloom Filter是一种空间效率极高的概率型数据结构,用于判断一个元素是否在一个集合中,适用于快速过滤大量数据。Bitmap则是在二进制数组中,用每一位来表示某个元素是否存在,适用于存储和查询大量离散数据。 4...
在给定的代码中,`Bloomfilter` 类实现了这个算法。`__init__` 方法初始化位数组,`hash_value` 方法根据提供的值生成哈希值并将其映射到位数组的合适范围,`add_value` 方法用于插入元素,`might_contain` 方法检查...
Fastrange算法的核心思想是使用预处理阶段构建辅助数据结构,并在查询阶段利用这个数据结构快速定位到目标范围内的元素。具体步骤如下: 1. 预处理:首先对数据集进行排序,然后通过特定的方法(如Bloom Filter或...
8. **布隆过滤器**:Redis提供了布隆过滤器(Bloom Filter)数据结构,用于高效地判断一个元素是否可能存在于集合中,适用于防止重复数据插入。 9. **地理空间索引**:有序集合可以用来存储地理位置信息,支持按距离...
Bloom Filter是一种空间效率极高的概率型数据结构,用于判断一个元素是否在一个集合中。它特别适用于海量数据的去重和快速查找。 - **网页爬虫**:利用Bloom Filter过滤已访问过的URL,避免重复爬取。 - **大数据...