Python 这是布卢姆过滤器的有效/适当使用吗?
我有一个API,数据来自该API,但很多API是冗余的(可以通过id确定)。我有一个bloom过滤器,有几百万个条目要开始 我正在使用来处理实现。 从我的在线阅读: Bloom Filter是一种紧凑的数据结构,用于一组变量的概率表示,以确保集合中的元素肯定存在还是绝对不存在 如果我有这样的伪代码Python 这是布卢姆过滤器的有效/适当使用吗?,python,computer-science,bloom-filter,Python,Computer Science,Bloom Filter,我有一个API,数据来自该API,但很多API是冗余的(可以通过id确定)。我有一个bloom过滤器,有几百万个条目要开始 我正在使用来处理实现。 从我的在线阅读: Bloom Filter是一种紧凑的数据结构,用于一组变量的概率表示,以确保集合中的元素肯定存在还是绝对不存在 如果我有这样的伪代码 newData #some dataset for row in newData: #filter.add() returns True if in set, we want only not
newData #some dataset
for row in newData:
#filter.add() returns True if in set, we want only not in set
if not filter.add(row.id):
#do some stuff with fresh data
每次传入一组数据时,都会调用此函数,约为每秒200个新条目
这是使用布卢姆过滤器的有效方法吗?布卢姆过滤器可以对任何给定的元素给出两个答案。它可以说“我肯定我以前从未见过这个元素”或“我相信我以前见过这个元素”。在后一种情况下,可能是布鲁姆过滤器不正确(也就是说,它说“我想我以前见过这个”,而实际上它没有) 也就是说,它所回答的问题不是“我以前从未见过这个”,而是“我想我以前见过这个”(它所见过的元素不可能得到“从未见过”的答案,但在某些情况下,它回答“可能见过”它所没有见过的元素) 这意味着,你唯一可以信赖的100%真实的答案是“从未见过”,但你可能对另一种情况感兴趣,因此你永远不会跳过处理新元素,这并不是Bloom过滤器给你的保证 如果处理成本很高,可以使用Bloom过滤器作为更昂贵的缓存查找的入口 伪代码:
if not bloom.seen(element):
# we have never seen this
bloom.add(element)
value = process(element)
more_expensive_cache.set(element, value)
return value
else:
value, seen = more_expensive_cache.lookup(element)
if not seen:
value = process(element)
more_expensive_cache.set(element, value)
return value
乔治-你的效率标准是什么?你真的是指适当性/正确性吗?我怀疑布鲁姆过滤器产生的错误对于你的应用来说是错误的。它可能会错误地说,给定的ID以前见过,而它以前没有见过。我认为您更喜欢另一种错误(错误地说一个值没有被看到,当它被看到时),因为这不会使您跳过一个不应该跳过的值(只处理一些您本可以跳过的额外值)。