阅读 CMU 的论文,PPT,以及Coolshell 的相关文章,用 Go 语言实现了论文提到的算法,做成一个库, goCuckoo GitHub
A Cuckoo hashing, substituting for bloom filter. written by Go
一个 Cuckoo Filter 的 Go 库

面对海量数据,我们需要一个索引数据结构,用来帮助查询,快速判断数据记录是否存在,这类数据结构叫过滤器,常用的选择是 Bloom Filter. 而 Cuckoo Filter 是它的优化变种。
Bloom Filter 的位图模式有两个问题:
Cuckoo Filter,可以确保该元素存在的必然性,又可以在不违背此前提下删除任意元素,仅仅比 Bloom Filter 牺牲了微量空间效率。 它的的数据模型:

go get github.com/zheng-ji/goCuckoo
import (
	"fmt"
	"github.com/zheng-ji/goCuckoo"
)
func main() {
    // speicify capacity 
	filter := cuckoo.NewCuckooFilter(10000)
	filter.Insert([]byte("zheng-ji"))
	filter.Insert([]byte("stupid"))
	filter.Insert([]byte("coder"))
	if filter.Find([]byte("stupid")) {
		fmt.Println("exist")
	} else {
		fmt.Println("Not exist")
	}
	filter.Del([]byte("stupid"))
	filter.Println(filter.Size())
}
Copyright (c) 2016 by zheng-ji released under MIT License.
|  |      13dwelcome      2016-07-29 23:10:27 +08:00 via Android 牛逼 | 
|      2mscorp      2016-07-29 23:41:23 +08:00 via iPhone 效率怎么样?误差率呢 | 
|  |      3KyleMeow      2016-07-29 23:49:33 +08:00 via iPhone  1 酷壳上也有个文章是介绍这个的,详细一些 | 
|  |      4knightdf      2016-07-30 00:08:42 +08:00 Bloom Filter 本来就不应该做删除,我用 bloom 不就是为了节省内存而浪费一点精度? |