From: Matt Joiner Date: Fri, 19 Dec 2014 23:07:41 +0000 (+1100) Subject: Add some tools for analysing bloom filter use X-Git-Tag: v1.0.0~1391 X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=e6c93455b5b018ba40c5bad20717fa7e6e6660be;p=btrtrc.git Add some tools for analysing bloom filter use --- diff --git a/internal/cmd/bloom-estimate/main.go b/internal/cmd/bloom-estimate/main.go new file mode 100644 index 00000000..e05071e1 --- /dev/null +++ b/internal/cmd/bloom-estimate/main.go @@ -0,0 +1,15 @@ +package main + +import ( + "flag" + "fmt" + "github.com/willf/bloom" +) + +func main() { + n := flag.Int("n", 0, "expected number of items") + falsePositiveRate := flag.Float64("fpr", 0, "false positive rate") + flag.Parse() + filter := bloom.NewWithEstimates(uint(*n), *falsePositiveRate) + fmt.Printf("m: %d, k: %d\n", filter.Cap(), filter.K()) +} diff --git a/internal/cmd/bloom-false-positives/main.go b/internal/cmd/bloom-false-positives/main.go new file mode 100644 index 00000000..d25ea17e --- /dev/null +++ b/internal/cmd/bloom-false-positives/main.go @@ -0,0 +1,30 @@ +package main + +import ( + "bufio" + "flag" + "fmt" + "github.com/willf/bloom" + "os" +) + +func main() { + m := flag.Uint("m", 0, "") + k := flag.Uint("k", 0, "") + flag.Parse() + filter := bloom.New(*m, *k) + scanner := bufio.NewScanner(os.Stdin) + n := 0 + collisions := 0 + for scanner.Scan() { + if filter.TestAndAdd(scanner.Bytes()) { + collisions++ + } + n++ + } + if err := scanner.Err(); err != nil { + fmt.Fprintf(os.Stderr, "error reading stdin: %s", err) + os.Exit(1) + } + fmt.Printf("collisions %d/%d (%f)\n", collisions, n, float64(collisions)/float64(n)*100) +}