Initial commit: bolt, map, leveldb support and test
This commit is contained in:
47
leveldb.go
Normal file
47
leveldb.go
Normal file
@@ -0,0 +1,47 @@
|
||||
package storage
|
||||
|
||||
import (
|
||||
"github.com/syndtr/goleveldb/leveldb"
|
||||
"github.com/syndtr/goleveldb/leveldb/filter"
|
||||
"github.com/syndtr/goleveldb/leveldb/opt"
|
||||
)
|
||||
|
||||
type LevelDB struct {
|
||||
db *leveldb.DB
|
||||
}
|
||||
|
||||
func NewLevelDB(path string) (*LevelDB, error) {
|
||||
db, err := leveldb.OpenFile(path, &opt.Options{
|
||||
Filter: filter.NewBloomFilter(32),
|
||||
})
|
||||
return &LevelDB{
|
||||
db: db,
|
||||
}, err
|
||||
}
|
||||
|
||||
func (ldb *LevelDB) Get(key string) ([]byte, error) {
|
||||
snapshot, err := ldb.db.GetSnapshot()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer snapshot.Release()
|
||||
|
||||
v, err := snapshot.Get([]byte(key), nil)
|
||||
if err == leveldb.ErrNotFound {
|
||||
err = ErrNotFound
|
||||
} else if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return v, err
|
||||
}
|
||||
|
||||
func (ldb *LevelDB) Set(key string, value []byte) error {
|
||||
batch := &leveldb.Batch{}
|
||||
batch.Put([]byte(key), value)
|
||||
return ldb.db.Write(batch, nil)
|
||||
}
|
||||
|
||||
func (ldb *LevelDB) Close() error {
|
||||
return ldb.db.Close()
|
||||
}
|
||||
Reference in New Issue
Block a user