Data structures 极低概率的概率集

Data structures 极低概率的概率集,data-structures,bloom-filter,Data Structures,Bloom Filter,我正在寻找一个集合数据结构,它被优化为一个非常低的概率,即一个项目是集合的一部分 使用案例是Gnip/Twitter合规消防软管,我们每秒大约获得1000个事件(即从所有Twitter上删除)。我们有一个表格,比如说1000万条储存的推文(每年都以这个数量增长),如果一个项目出现在消防水管中,我就必须删除它。我猜每10万秒就会有一场比赛(从空中拿出一个数字) 我曾经想到过一个bloom过滤器,可能有几个链接,但是考虑到命中的可能性很低,我总是需要遍历整个链接,最终事情会变得线性 有一个好的次线性

我正在寻找一个集合数据结构,它被优化为一个非常低的概率,即一个项目是集合的一部分

使用案例是Gnip/Twitter合规消防软管,我们每秒大约获得1000个事件(即从所有Twitter上删除)。我们有一个表格,比如说1000万条储存的推文(每年都以这个数量增长),如果一个项目出现在消防水管中,我就必须删除它。我猜每10万秒就会有一场比赛(从空中拿出一个数字)

我曾经想到过一个bloom过滤器,可能有几个链接,但是考虑到命中的可能性很低,我总是需要遍历整个链接,最终事情会变得线性


有一个好的次线性数据结构吗?

我看不出有什么问题。在我看来,如果检查Bloom过滤器告诉您存储了tweet,那么您可以在数据存储中查找该tweet。如果存在,则删除它。如果它不在那里,就不能删除它

你有1000万条储存的tweet,你预计它将以每年1000万条的速度增长。因此,构建一个容量为10亿的Bloom过滤器,其误报概率为0.1%。根据数据,这将花费你1.67千兆字节

请理解,“误报”数字假设过滤器包含10亿个密钥。当您的筛选器非常稀疏时,误报的概率要低得多

如果你每秒收到1000条推文,而Bloom过滤器的误报率为0.1%,那么在最坏的情况下,你平均每秒会收到一条误报。因此,您的代码必须每秒点击一次数据库,以确定tweet是否存在


但要想做到这一点还需要很多年。现有记录只有1000万条,每年的增长率为1000万条,过滤器甚至要满10%还需要10年的时间。您可能会将过滤器大小降低到5亿(860MB),但仍然不会注意到由于误报而造成的重大影响。

我看不出问题所在。在我看来,如果检查Bloom过滤器告诉您存储了tweet,那么您可以在数据存储中查找该tweet。如果存在,则删除它。如果它不在那里,就不能删除它

你有1000万条储存的tweet,你预计它将以每年1000万条的速度增长。因此,构建一个容量为10亿的Bloom过滤器,其误报概率为0.1%。根据数据,这将花费你1.67千兆字节

请理解,“误报”数字假设过滤器包含10亿个密钥。当您的筛选器非常稀疏时,误报的概率要低得多

如果你每秒收到1000条推文,而Bloom过滤器的误报率为0.1%,那么在最坏的情况下,你平均每秒会收到一条误报。因此,您的代码必须每秒点击一次数据库,以确定tweet是否存在


但要想做到这一点还需要很多年。现有记录只有1000万条,每年的增长率为1000万条,过滤器甚至要满10%还需要10年的时间。您可能会将过滤器大小降低到5亿(860MB),但仍然没有注意到由于误报而造成的重大影响。

假定Bloom过滤器适合内存,那么它应该可以使用。如果它不能完全符合内存,请考虑使用

中描述的解决方案。
或者,如果您真的想压缩一点额外的性能,您可以使用,但要找到一个开源实现对您来说会更困难;这里有一个在。

一个Bloom过滤器应该是好的,假设它适合内存。如果它不能完全符合内存,请考虑使用

中描述的解决方案。
或者,如果您真的想压缩一点额外的性能,您可以使用,但要找到一个开源实现对您来说会更困难;这里是一个例子。

您尝试过使用哈希表吗?哈希表的大小将线性增加,这是我试图避免的。您尝试过使用哈希表吗?哈希表的大小将线性增加,这是我试图避免的。我没有仔细看概率;听起来香草花过滤器可以完成这项工作。我只是想看看是否有另一个数据结构是为“不可能”的情况设计的。非常感谢你的回答,我会试试看。我没有仔细研究概率;听起来香草花过滤器可以完成这项工作。我只是想看看是否有另一个数据结构是为“不可能”的情况设计的。非常感谢你的回答,我会试试看。