]> Sergey Matveev's repositories - btrtrc.git/commitdiff
Add some tools for analysing bloom filter use
authorMatt Joiner <anacrolix@gmail.com>
Fri, 19 Dec 2014 23:07:41 +0000 (10:07 +1100)
committerMatt Joiner <anacrolix@gmail.com>
Fri, 19 Dec 2014 23:07:41 +0000 (10:07 +1100)
internal/cmd/bloom-estimate/main.go [new file with mode: 0644]
internal/cmd/bloom-false-positives/main.go [new file with mode: 0644]

diff --git a/internal/cmd/bloom-estimate/main.go b/internal/cmd/bloom-estimate/main.go
new file mode 100644 (file)
index 0000000..e05071e
--- /dev/null
@@ -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 (file)
index 0000000..d25ea17
--- /dev/null
@@ -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)
+}