Implementing a Cuckoo Filter in Go(medium.com)
medium.com
Implementing a Cuckoo Filter in Go
https://medium.com/@meeusdylan/implementing-a-cuckoo-filter-in-go-147a5f1f7a9
5 comments
It's a good point - and I wasn't entirely sure what to go with.
In the end, I went with the shorter variable names as they are used in the paper I've linked: https://www.pdl.cmu.edu/PDL-FTP/FS/cuckoo-conext2014.pdf
In a production version of this, longer variable names would be a good thing. :)
In the end, I went with the shorter variable names as they are used in the paper I've linked: https://www.pdl.cmu.edu/PDL-FTP/FS/cuckoo-conext2014.pdf
In a production version of this, longer variable names would be a good thing. :)
The global hasher var makes this code unsafe for concurrent use by multiple goroutines.
This code should just call sha1.New(). If for some reason these allocations are a performance issue it is very simple to fix that will a little pooling:
package main
import (
"crypto/sha1"
"hash"
"sync"
)
func main() {
hasher := getHasher()
defer poolHasher(hasher)
}
var hasherPool sync.Pool = sync.Pool{
New: func() interface{} {
return sha1.New()
},
}
func getHasher() hash.Hash {
return hasherPool.Get().(hash.Hash)
}
func poolHasher(hasher hash.Hash) {
hasher.Reset()
hasherPool.Put(hasher)
}Or just use sha1.Sum https://golang.org/pkg/crypto/sha1/#Sum
it would be so much more readable if the struct had more descriptive names