BadgerDB是以key value形式存放在硬盘上,官网拿自己跟facebook的Rocksdb 做对比,说自己支持SSD,Rocksdb不支持。
对于存储固然少不了 Add,delete, update , Search
从BadgerDB编程来说
1. 打开数据库, 需要设在数据存放路径
2. 操作 -- Add, Delete, Update, Search
package main
import (
"log"
"github.com/dgraph-io/badger"
)
func main() {
// Open the Badger database located in the /tmp/badger directory.
// It will be created if it doesn't exist.
opts := badger.DefaultOptions
opts.Dir = "/tmp/badger"
opts.ValueDir = "/tmp/badger"
db, err := badger.Open(opts)
if err != nil {
log.Fatal(err)
}
defer db.Close()
// Your code here…
}
db, err := badger.Open(opts)
注意: Open之后,目录/tmp/badger会被锁住,即其他进程Open时会报错.
2.操作: Add,我们开一个事物来处理
update := db.NewTransaction(true) #读写事物
defer update.Discard()
if err := update.Set([]byte("key"), []byte("value"));err == nil {
_ = update.Commit() #内部有调用Discard
}
3.操作; Delete
txn := db.NewTransaction(true)
defer txn.Discard()
if err:=txn.Delete([]byte("key"));err == nil {
return true
}
4. 操作:Get
gtxn := db.NewTransaction(false) #只读事物
defer gtxn.Discard()
if item, err := gtxn.Get([]byte("key"));err == nil {
if value,err := item.ValueCopy(nil); err == nil{
fmt.Println(value)
}
}
5.操作:遍历整个数据
txn := db.NewTransaction(false)
defer txn.Discard()
iter := badger.DefaultIteratorOptions
it := txn.NewIterator(iter)
for it.Rewind();it.Valid(); it.Next(){
item := it.Item()
fmt.Printf("key: %s\n", item.Key())
value,_ := item.CopyValue(nil)
fmt.Printf("value: %s\n", value)
}
badger 还有其他的关于stream(需要使用openmanage), prefix(iterator: seek)