java - Bloom filter单独存储最近50条数据内容

标签 java data-structures bloom-filter

您好,在我的系统中将有一个主节点和 n 个从节点,其中主节点会将传入请求分发到其从节点之一。为了利用缓存内存内容,我想跟踪从属节点已经服务的最后 50 个请求(传入请求的哈希值)(假设最后 50 个请求已经存在于缓存内存中,这样节点将快速响应请求)。 据我研究,布隆过滤器中的删除很困难。但它也可以通过计数过滤器来完成。是否真的有可能像移动窗口一样保持布隆过滤器(比如在 50 个请求之后它应该从前端删除以适应新请求)。是否真的可以这样做,或者是否有任何其他过滤器,如布隆过滤器(它应该足够快以检查元素的存在)。

最佳答案

如果您只跟踪 50 件事,我认为布隆过滤器不是合适的数据结构。当您有大量无法保存在内存中的数据并且想要进行预过滤以消除某些远程数据结构(例如远程数据库)中不必要的查找时,布隆过滤器非常有用。如果您只有 50 个元素,那么几乎可以肯定,您最好使用哈希表之类的东西来存储这些值,因为您可以在预期的 O(1) 时间内以最小的空间开销获得准确的答案。

如果您想跟踪您最近看到的 50 个元素,请考虑查看链接的哈希表,它支持插入、查找、删除和删除最老的所有操作,时间复杂度为 O(1)。 Java 的 LinkedHashMap 在这里应该很棒。

希望这对您有所帮助!

关于java - Bloom filter单独存储最近50条数据内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9251035/

相关文章:

hadoop - MapReduce 中的布隆过滤器

java - jsp中的日期格式

java - 如何将结构传递给 JCuda 中的内核

java - 调用某行代码本身的方式?

sql-server - 标准化平均值的 T-SQL

java - 是否有可用的 Bloomier 过滤器的实现?

java - 如何在 Android 中借助 DTO 解析此内容

java - 成对交换节点

c# - .Net 中的数据结构在内存中保持异构结构连续

c++ - 布隆过滤器误报