当前位置: 首页 > 工具软件 > BadgerDB > 使用案例 >

BadgerDb 快速存储的,固化的数据库

袁翰池
2023-12-01

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) 

 类似资料: