added configurable options to leveldb
This commit is contained in:
parent
d6e6f655c9
commit
362d240b09
|
@ -29,15 +29,13 @@ type Store struct {
|
|||
writer sync.Mutex
|
||||
}
|
||||
|
||||
func Open(path string, createIfMissing bool, errorIfExists bool) (*Store, error) {
|
||||
func Open(path string, config map[string]interface{}) (*Store, error) {
|
||||
rv := Store{
|
||||
path: path,
|
||||
opts: levigo.NewOptions(),
|
||||
}
|
||||
|
||||
opts := levigo.NewOptions()
|
||||
opts.SetCreateIfMissing(createIfMissing)
|
||||
opts.SetErrorIfExists(errorIfExists)
|
||||
rv.opts = opts
|
||||
applyConfig(rv.opts, config)
|
||||
|
||||
var err error
|
||||
rv.db, err = levigo.Open(rv.path, rv.opts)
|
||||
|
@ -118,19 +116,52 @@ func StoreConstructor(config map[string]interface{}) (store.KVStore, error) {
|
|||
if !ok {
|
||||
return nil, fmt.Errorf("must specify path")
|
||||
}
|
||||
createIfMissing := false
|
||||
cim, ok := config["create_if_missing"].(bool)
|
||||
if ok {
|
||||
createIfMissing = cim
|
||||
}
|
||||
errorIfExists := true
|
||||
eie, ok := config["error_if_exists"].(bool)
|
||||
if ok {
|
||||
errorIfExists = eie
|
||||
}
|
||||
return Open(path, createIfMissing, errorIfExists)
|
||||
return Open(path, config)
|
||||
}
|
||||
|
||||
func init() {
|
||||
registry.RegisterKVStore(Name, StoreConstructor)
|
||||
}
|
||||
|
||||
func applyConfig(o *levigo.Options, config map[string]interface{}) (
|
||||
*levigo.Options, error) {
|
||||
|
||||
cim, ok := config["create_if_missing"].(bool)
|
||||
if ok {
|
||||
o.SetCreateIfMissing(cim)
|
||||
}
|
||||
|
||||
eie, ok := config["error_if_exists"].(bool)
|
||||
if ok {
|
||||
o.SetErrorIfExists(eie)
|
||||
}
|
||||
|
||||
wbs, ok := config["write_buffer_size"].(float64)
|
||||
if ok {
|
||||
o.SetWriteBufferSize(int(wbs))
|
||||
}
|
||||
|
||||
bs, ok := config["block_size"].(float64)
|
||||
if ok {
|
||||
o.SetBlockSize(int(bs))
|
||||
}
|
||||
|
||||
bri, ok := config["block_restart_interval"].(float64)
|
||||
if ok {
|
||||
o.SetBlockRestartInterval(int(bri))
|
||||
}
|
||||
|
||||
lcc, ok := config["lru_cache_capacity"].(float64)
|
||||
if ok {
|
||||
lruCache := levigo.NewLRUCache(int(lcc))
|
||||
o.SetCache(lruCache)
|
||||
}
|
||||
|
||||
bfbpk, ok := config["bloom_filter_bits_per_key"].(float64)
|
||||
if ok {
|
||||
bf := levigo.NewBloomFilter(int(bfbpk))
|
||||
o.SetFilterPolicy(bf)
|
||||
}
|
||||
|
||||
return o, nil
|
||||
}
|
||||
|
|
|
@ -19,10 +19,14 @@ import (
|
|||
"github.com/blevesearch/bleve/index/store"
|
||||
)
|
||||
|
||||
var leveldbTestOptions = map[string]interface{}{
|
||||
"create_if_missing": true,
|
||||
}
|
||||
|
||||
func TestLevelDBStore(t *testing.T) {
|
||||
defer os.RemoveAll("test")
|
||||
|
||||
s, err := Open("test", true, true)
|
||||
s, err := Open("test", leveldbTestOptions)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
@ -34,7 +38,7 @@ func TestLevelDBStore(t *testing.T) {
|
|||
func TestReaderIsolation(t *testing.T) {
|
||||
defer os.RemoveAll("test")
|
||||
|
||||
s, err := Open("test", true, true)
|
||||
s, err := Open("test", leveldbTestOptions)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
|
|
@ -18,8 +18,12 @@ import (
|
|||
"github.com/blevesearch/bleve/index/store/leveldb"
|
||||
)
|
||||
|
||||
var leveldbTestOptions = map[string]interface{}{
|
||||
"create_if_missing": true,
|
||||
}
|
||||
|
||||
func BenchmarkLevelDBIndexing1Workers(b *testing.B) {
|
||||
s, err := leveldb.Open("test", true, true)
|
||||
s, err := leveldb.Open("test", leveldbTestOptions)
|
||||
if err != nil {
|
||||
b.Fatal(err)
|
||||
}
|
||||
|
@ -30,7 +34,7 @@ func BenchmarkLevelDBIndexing1Workers(b *testing.B) {
|
|||
}
|
||||
|
||||
func BenchmarkLevelDBIndexing2Workers(b *testing.B) {
|
||||
s, err := leveldb.Open("test", true, true)
|
||||
s, err := leveldb.Open("test", leveldbTestOptions)
|
||||
if err != nil {
|
||||
b.Fatal(err)
|
||||
}
|
||||
|
@ -41,7 +45,7 @@ func BenchmarkLevelDBIndexing2Workers(b *testing.B) {
|
|||
}
|
||||
|
||||
func BenchmarkLevelDBIndexing4Workers(b *testing.B) {
|
||||
s, err := leveldb.Open("test", true, true)
|
||||
s, err := leveldb.Open("test", leveldbTestOptions)
|
||||
if err != nil {
|
||||
b.Fatal(err)
|
||||
}
|
||||
|
@ -54,7 +58,7 @@ func BenchmarkLevelDBIndexing4Workers(b *testing.B) {
|
|||
// batches
|
||||
|
||||
func BenchmarkLevelDBIndexing1Workers10Batch(b *testing.B) {
|
||||
s, err := leveldb.Open("test", true, true)
|
||||
s, err := leveldb.Open("test", leveldbTestOptions)
|
||||
if err != nil {
|
||||
b.Fatal(err)
|
||||
}
|
||||
|
@ -65,7 +69,7 @@ func BenchmarkLevelDBIndexing1Workers10Batch(b *testing.B) {
|
|||
}
|
||||
|
||||
func BenchmarkLevelDBIndexing2Workers10Batch(b *testing.B) {
|
||||
s, err := leveldb.Open("test", true, true)
|
||||
s, err := leveldb.Open("test", leveldbTestOptions)
|
||||
if err != nil {
|
||||
b.Fatal(err)
|
||||
}
|
||||
|
@ -76,7 +80,7 @@ func BenchmarkLevelDBIndexing2Workers10Batch(b *testing.B) {
|
|||
}
|
||||
|
||||
func BenchmarkLevelDBIndexing4Workers10Batch(b *testing.B) {
|
||||
s, err := leveldb.Open("test", true, true)
|
||||
s, err := leveldb.Open("test", leveldbTestOptions)
|
||||
if err != nil {
|
||||
b.Fatal(err)
|
||||
}
|
||||
|
@ -87,7 +91,7 @@ func BenchmarkLevelDBIndexing4Workers10Batch(b *testing.B) {
|
|||
}
|
||||
|
||||
func BenchmarkLevelDBIndexing1Workers100Batch(b *testing.B) {
|
||||
s, err := leveldb.Open("test", true, true)
|
||||
s, err := leveldb.Open("test", leveldbTestOptions)
|
||||
if err != nil {
|
||||
b.Fatal(err)
|
||||
}
|
||||
|
@ -98,7 +102,7 @@ func BenchmarkLevelDBIndexing1Workers100Batch(b *testing.B) {
|
|||
}
|
||||
|
||||
func BenchmarkLevelDBIndexing2Workers100Batch(b *testing.B) {
|
||||
s, err := leveldb.Open("test", true, true)
|
||||
s, err := leveldb.Open("test", leveldbTestOptions)
|
||||
if err != nil {
|
||||
b.Fatal(err)
|
||||
}
|
||||
|
@ -109,7 +113,7 @@ func BenchmarkLevelDBIndexing2Workers100Batch(b *testing.B) {
|
|||
}
|
||||
|
||||
func BenchmarkLevelDBIndexing4Workers100Batch(b *testing.B) {
|
||||
s, err := leveldb.Open("test", true, true)
|
||||
s, err := leveldb.Open("test", leveldbTestOptions)
|
||||
if err != nil {
|
||||
b.Fatal(err)
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user