linvon / cuckoo-filter

Cuckoo Filter go implement, better than Bloom Filter, configurable and space optimized 布谷鸟过滤器的Go实现,优于布隆过滤器,可以定制化过滤器参数,并进行了空间优化
MIT License
294 stars 27 forks source link

是否有选择配置项的金手指 #8

Closed GuoxinL closed 2 years ago

GuoxinL commented 2 years ago

我通过穷举找出了200w数据性能最优的配置 Size: 200w, TableType: 1, TagsPreBucket: 2, BisPreIterm: 11, Space: 11mb x轴坐标是没一点代表1w个key,y轴坐标代表时间消耗/纳秒

image

咨询下是否可以根据数据量得出配置,或者配置的范围公式,也有可能是我文档没有看透,希望作者指导一下

GuoxinL commented 2 years ago

还有一个问题就是为啥刚开始插入耗时消耗比较高往后趋近于平稳?

linvon commented 2 years ago

咨询下是否可以根据数据量得出配置,或者配置的范围公式

针对于性能并没有这样的经验公式,但我相信这样纳秒到微秒级别的性能差距,可能远不及1byte在网络中传输带来的消耗,如果你的过滤器是用在内存中,那么可以追求极致的插入、查询性能,否则你应该同时关注过滤器大小所影响的传输耗时。在实战指南的细节实现部分有提到关于过滤器参数的选择

还有一个问题就是为啥刚开始插入耗时消耗比较高往后趋近于平稳?

这个问题我并没有思考过,猜测可能与一些系统、语言的内存策略有关,如果你有什么发现也欢迎交流

GuoxinL commented 2 years ago

确实是在内存中使用的,我也是想追求极致的插入和查询性能,实战那部分看的有些蒙,对于调整参数来说, 目前通过穷举的方式(有以下条件)尝试出了上图比较平稳并且性能,空间效率都较好的情况 200w, 单桶或半序桶, b[2,4,8,16], f[9,32], 是否使用size优化(size/α ~=(<) 2^n)