storage/leveldb.go

48 lines
906 B
Go

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()
}