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