在我的系统中,将有一个主节点和n个从属节点,其中主节点将传入请求分发到其一个从节点。为了利用缓存内容,我想跟踪从节点已经服务的最后50个请求(传入请求的散列)(假设最后50个请求已经存在于缓存中,那么节点将快速提供请求)。 据我所研究,在bloom过滤器中删除很困难。但它也可以通过计数过滤器来完成。是否真的可以将布隆过滤器保持为移动窗口(就像在50请求之后它应该从前端删除以容纳新请求)。是否真的可以这样做或者是否有任何其他过滤器如布隆过滤器(它应该足够快以检查元素的存在)。
答案 0 :(得分:5)
如果你只有50件你要跟踪的东西,我认为Bloom过滤器不是一个合适的数据结构。如果数据无法保存在内存中并希望进行预过滤以消除某些远程数据结构(如远程数据库)中不必要的查找,则Bloom过滤器很有用。如果你只有50个元素,那么使用哈希表来存储这些值几乎肯定会更好,因为你可以在预期的O(1)时间内以最小的空间开销得到确切的答案。
如果你想跟踪你见过的最后50个元素,可以考虑查看一个链接的哈希表,它在O(1)时间内支持insert,lookup,delete和delete-eldest。 Java的LinkedHashMap
在这里应该很棒。
希望这有帮助!