2021-11-09 来源:华纳网 责任编辑:韩玉玲 人气:
核心提示:非常好用KV数据库BoltDB

知识点:

KV数据库BoltDB


 


本课内容:

大家好,欢迎来到谷雨课堂,

BoltDB是非常出名的纯Go实现的KV读写引擎

BoltDB源码清晰, 

没有太多坑(可能谷雨老师还没遇到),

就是经典的BTree, 

非常可控的

etcd和consul都用使用了BlotDB,

他的性能不是最多高,

而是其简单可靠,

Raft就是为了稳定, 

如果最底层的读写引擎出错, 

那就失去了全部意义

此外B+Tree天然优势,

随机查询比LSMT快

 

以下是全部代码:

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
package mainimport (  "fmt"  "io/ioutil"  "log"
  "github.com/boltdb/bolt")

func getFile(f string) []byte {  b, _ := ioutil.ReadFile(f)  return b}

func main() {  // 创建或者打开数据库  db, err := bolt.Open("my.db", 0600, nil)  if err != nil {    log.Fatal(err)  }  defer db.Close()

  // 创建表  err = db.Update(func(tx *bolt.Tx) error {    b, err := tx.CreateBucket([]byte("MyBucket"))    if err != nil {      fmt.Printf("create bucket: %s", err)    }

    // 获取BlockBucket表单    b = tx.Bucket([]byte("MyBucket"))

    // 往表里面存储数据    if b != nil {      err := b.Put([]byte("file1"), getFile("d:/soft/BaiduNetdisk_7.0.10.2.exe"))      if err != nil {        log.Panic("数据存储失败......")      }    }

    // 返回nil,以便数据库处理相应操作    return nil  })  //更新失败  if err != nil {    log.Panic(err)  }

  // 查看数据  err = db.View(func(tx *bolt.Tx) error {

    // 获取BlockBucket表对象    b := tx.Bucket([]byte("MyBucket"))

    // 往表里面存储数据    if b != nil {      data := b.Get([]byte("file1"))      //ioutil.WriteFile("1.exe", data, 0644)      fmt.Printf("%d\n", len(data))

    }

    // 返回nil,以便数据库处理相应操作    return nil  })  //更新失败  if err != nil {    log.Panic(err)  }

}

 

完整的源代码可以登录【华纳网】下载。

https://www.worldwarner.com/





 





免责声明:本文仅代表作者个人观点,与华纳网无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。