Categorygithub.com/ISSuh/bloom
repositorypackage
1.0.0
Repository: https://github.com/issuh/bloom.git
Documentation: pkg.go.dev

# README

bloom

implement bloom filter on Golang

useage

go get github.com/ISSuh/bloom

import (
  "hash/fnv"

  "github.com/ISSuh/bloom"
)

func ExampleDefaultHash() {
  numberOfSize := uint64(1024)
  numberOfHash := 3

  // use default hash function(murmur3)
  fiter := bloom.NewFilter(numberOfSize, numberOfHash)

  testKey := []byte("test")
  if err := filter.Add(testKey); err != nil {
    return
  }

  if has, err := filter.Has(testKey); !has || err != nil {
    return
  }
}

func ExampleUserHash() {
  numberOfSize := uint64(1024)
  numberOfHash := 3
  userHash := fnv.New64()

  // use user hash function
  fiter := bloom.NewFilterWithHash(numberOfSize, numberOfHash, userHash)

  testKey := []byte("test")
  if err := filter.Add(testKey); err != nil {
    return
  }

  if has, err := filter.Has(testKey); !has || err != nil {
    return
  }
}

benchmark

> go test -bench . -benchmem -benchtime 10000x
goos: darwin
goarch: arm64
pkg: github.com/ISSuh/bloom
BenchmarkBitsetSet-11                              10000                30.33 ns/op            0 B/op          0 allocs/op
BenchmarkBitsetSetSizePowerOfByte-11               10000                26.44 ns/op            0 B/op          0 allocs/op
BenchmarkBitsetGet-11                              10000                21.33 ns/op            0 B/op          0 allocs/op
BenchmarkFilterAdd-11                              10000                98.44 ns/op            0 B/op          0 allocs/op
BenchmarkFilterHas-11                              10000                87.97 ns/op            0 B/op          0 allocs/op
PASS
ok      github.com/ISSuh/bloom  2.238s