steem-block-db/badgerdb.go

63 lines
1.1 KiB
Go
Raw Normal View History

2018-10-04 18:41:39 +00:00
package main
import "log"
import "io/ioutil"
import "github.com/dgraph-io/badger"
type KeyValueStore struct {
2018-10-18 06:31:02 +00:00
db *badger.DB
2018-10-04 18:41:39 +00:00
}
func NewKeyValueStore() *KeyValueStore {
2018-10-18 06:31:02 +00:00
kv := new(KeyValueStore)
kv.init()
return kv
2018-10-04 18:41:39 +00:00
}
func (kv *KeyValueStore) init() {
2018-10-18 06:31:02 +00:00
dir, err := ioutil.TempDir("", "badger")
if err != nil {
log.Fatal(err)
}
opts := badger.DefaultOptions
opts.Dir = dir
opts.ValueDir = dir
kv.db, err = badger.Open(opts)
if err != nil {
log.Fatal(err)
}
2018-10-04 18:41:39 +00:00
}
func (kv *KeyValueStore) Close() {
2018-10-18 06:31:02 +00:00
kv.db.Close()
2018-10-04 18:41:39 +00:00
}
func (kv *KeyValueStore) Put(key *string, value *string) error {
2018-10-18 06:31:02 +00:00
txn := kv.db.NewTransaction(true) // Read-write txn
err := txn.Set([]byte(*key), []byte(*value))
if err != nil {
log.Fatal(err)
}
err = txn.Commit(nil)
if err != nil {
log.Fatal(err)
}
return nil
2018-10-04 18:41:39 +00:00
}
func (kv *KeyValueStore) Get(key *string) (*string, error) {
2018-10-18 06:31:02 +00:00
txn := kv.db.NewTransaction(true) // Read-write txn
item, err := txn.Get([]byte(*key))
if err != nil {
return nil, err
}
val, err := item.ValueCopy(nil)
if err != nil {
return nil, err
}
s := string(val)
return &s, nil
2018-10-04 18:41:39 +00:00
}