aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorqieqieplus <admin@qieqie.me>2021-07-23 14:05:59 -0600
committerqieqieplus <admin@qieqie.me>2021-07-23 14:05:59 -0600
commit2b46df13f862b99d671edbaec96d2cad26f8ed55 (patch)
tree4e2eca0d915070ae84744f987cb3d6e284c7021f
parenta45bbc0b75dca72d715ef589d0a61f0e1b2c4eed (diff)
downloadseaweedfs-2b46df13f862b99d671edbaec96d2cad26f8ed55.tar.xz
seaweedfs-2b46df13f862b99d671edbaec96d2cad26f8ed55.zip
add bloom filter for filer leveldb/rocksdb
-rw-r--r--weed/filer/leveldb2/leveldb2_store.go7
-rw-r--r--weed/filer/leveldb3/leveldb3_store.go14
-rw-r--r--weed/filer/rocksdb/rocksdb_store.go8
3 files changed, 22 insertions, 7 deletions
diff --git a/weed/filer/leveldb2/leveldb2_store.go b/weed/filer/leveldb2/leveldb2_store.go
index 59e831598..bf81bface 100644
--- a/weed/filer/leveldb2/leveldb2_store.go
+++ b/weed/filer/leveldb2/leveldb2_store.go
@@ -5,12 +5,14 @@ import (
"context"
"crypto/md5"
"fmt"
+ "io"
+ "os"
+
"github.com/syndtr/goleveldb/leveldb"
leveldb_errors "github.com/syndtr/goleveldb/leveldb/errors"
+ "github.com/syndtr/goleveldb/leveldb/filter"
"github.com/syndtr/goleveldb/leveldb/opt"
leveldb_util "github.com/syndtr/goleveldb/leveldb/util"
- "io"
- "os"
"github.com/chrislusf/seaweedfs/weed/filer"
"github.com/chrislusf/seaweedfs/weed/glog"
@@ -47,6 +49,7 @@ func (store *LevelDB2Store) initialize(dir string, dbCount int) (err error) {
BlockCacheCapacity: 32 * 1024 * 1024, // default value is 8MiB
WriteBuffer: 16 * 1024 * 1024, // default value is 4MiB
CompactionTableSizeMultiplier: 4,
+ Filter: filter.NewBloomFilter(8), // false positive rate 0.02
}
for d := 0; d < dbCount; d++ {
diff --git a/weed/filer/leveldb3/leveldb3_store.go b/weed/filer/leveldb3/leveldb3_store.go
index 3db7722b7..70e5088a2 100644
--- a/weed/filer/leveldb3/leveldb3_store.go
+++ b/weed/filer/leveldb3/leveldb3_store.go
@@ -5,15 +5,17 @@ import (
"context"
"crypto/md5"
"fmt"
- "github.com/syndtr/goleveldb/leveldb"
- leveldb_errors "github.com/syndtr/goleveldb/leveldb/errors"
- "github.com/syndtr/goleveldb/leveldb/opt"
- leveldb_util "github.com/syndtr/goleveldb/leveldb/util"
"io"
"os"
"strings"
"sync"
+ "github.com/syndtr/goleveldb/leveldb"
+ leveldb_errors "github.com/syndtr/goleveldb/leveldb/errors"
+ "github.com/syndtr/goleveldb/leveldb/filter"
+ "github.com/syndtr/goleveldb/leveldb/opt"
+ leveldb_util "github.com/syndtr/goleveldb/leveldb/util"
+
"github.com/chrislusf/seaweedfs/weed/filer"
"github.com/chrislusf/seaweedfs/weed/glog"
"github.com/chrislusf/seaweedfs/weed/pb/filer_pb"
@@ -62,17 +64,19 @@ func (store *LevelDB3Store) initialize(dir string) (err error) {
}
func (store *LevelDB3Store) loadDB(name string) (*leveldb.DB, error) {
-
+ bloom := filter.NewBloomFilter(8) // false positive rate 0.02
opts := &opt.Options{
BlockCacheCapacity: 32 * 1024 * 1024, // default value is 8MiB
WriteBuffer: 16 * 1024 * 1024, // default value is 4MiB
CompactionTableSizeMultiplier: 4,
+ Filter: bloom,
}
if name != DEFAULT {
opts = &opt.Options{
BlockCacheCapacity: 4 * 1024 * 1024, // default value is 8MiB
WriteBuffer: 2 * 1024 * 1024, // default value is 4MiB
CompactionTableSizeMultiplier: 4,
+ Filter: bloom,
}
}
diff --git a/weed/filer/rocksdb/rocksdb_store.go b/weed/filer/rocksdb/rocksdb_store.go
index face5963e..467b07aaa 100644
--- a/weed/filer/rocksdb/rocksdb_store.go
+++ b/weed/filer/rocksdb/rocksdb_store.go
@@ -24,18 +24,21 @@ func init() {
type options struct {
opt *gorocksdb.Options
+ bto *gorocksdb.BlockBasedTableOptions
ro *gorocksdb.ReadOptions
wo *gorocksdb.WriteOptions
}
func (opt *options) init() {
opt.opt = gorocksdb.NewDefaultOptions()
+ opt.bto = gorocksdb.NewDefaultBlockBasedTableOptions()
opt.ro = gorocksdb.NewDefaultReadOptions()
opt.wo = gorocksdb.NewDefaultWriteOptions()
}
func (opt *options) close() {
opt.opt.Destroy()
+ opt.bto.Destroy()
opt.ro.Destroy()
opt.wo.Destroy()
}
@@ -69,6 +72,11 @@ func (store *RocksDBStore) initialize(dir string) (err error) {
store.opt.SetCompactionFilter(NewTTLFilter())
// store.opt.SetMaxBackgroundCompactions(2)
+ // https://github.com/tecbot/gorocksdb/issues/132
+ store.bto.SetFilterPolicy(gorocksdb.NewBloomFilterFull(8))
+ store.opt.SetBlockBasedTableFactory(store.bto)
+ // store.opt.EnableStatistics()
+
store.db, err = gorocksdb.OpenDb(store.opt, dir)
return