Closed GuoxinL closed 2 years ago
有歧义是指? victim.used只有在超过kick out次数后置true认为“满”了并无法再写入,add方法本身也是这个逻辑
Add方法的功能没有问题,因为filter满了确实不可以在添加item并且重复也不可以添加item,这都没有问题;但是,我在Add后得到的false结果中区分不出来当前过滤器是否是满了,还是当前过滤器没有满但item已存在; 所以才希望您能暴露这个方法
func (f *Filter) IsFull() bool {
return f.victim.used
}
这样的话,我就可以在add后明确的通过IsFull
来知道是否真的满了
如果您认可这样的方式我可以提一个pr
你可以在阅读一下添加元素过程的代码,它和布隆过滤器添加元素并不一样,f.victim.used只会在item不断被kick out直至无法填入时置true,虽然实际过滤器可能还有空间,但这时我们认为过滤器已经“满了”,因此add方法返回false时就是我们所说的满了
我看过这里的源码add的过程中用“kMaxCuckooCount”来限制踢的次数; 您的意思是我每次需要判断满的时候都可以调用add方法,就可以知道当前filter是否满是吧;感觉哈,这么做不是特别好:) 感觉不是特别的明确
我的需求是想用多个布谷鸟过滤器形成一个链表,比如有10个filter的filterChain,item进入时会插入到最近的一个,会判断当前filter是否满,如果没有满的话就会插入,如果满的话就进入下一个filter,都满了会采用LRU的方式去做淘汰;
其实是一样的,你直接调用add,对于插入失败就表示满了,可以避免先判断full再插入这样的冗余代码
之前的理解错误,将Add方法理解成非线性的了
感谢您耐心的解答!
能否暴露布谷鸟过滤器是否满的方法或者接口
f.victim.used
如果只通过Add
方法判断是有歧义的