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