美文网首页
BoltDB(一)介绍以及调试代码

BoltDB(一)介绍以及调试代码

作者: wayyyy | 来源:发表于2022-08-14 21:24 被阅读0次

    BoltDB是一个嵌入式key/value的数据库, 它由 B+Tree实现,etcd和consul项目都用了它,未必是因为性能有多高而是简单可靠,个人认为比较适合的场景是,用来做wal日志或者读多写少的存储场景。

    BoltDB设计源于LMDB,具有以下特点:

    • boltdb不是分布式数据库,它是一款单机版的数据库。
    • boltdb不是sql类型的关系型数据库,它和其他的kv组件类似,对外暴露的是kv的接口。
    • boltdb数据库支持两类事务:读写事务、只读事务。
    调试代码
    1. BoltDB 下载源码,解压为 bolt-mastart 目录

    2. IDE 新建 blotDB-demo 工程

    3. 将 bolt-mastart 目录放置工程中,并在 bolt-mastart 目录内新建 go.mod 文件

      module bolt
      
      go 1.17
      
    4. 在 blotDB-demo 工程中新建 go.mod 文件

      module boltDB-demo
      
      go 1.16
      
      require (
          github.com/boltdb/bolt v1.3.1
          golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab // indirect
      )
      
      replace github.com/boltdb/bolt v1.3.1 => ./bolt-master
      
    5. main 代码:
      编写简单的代码,打断点调试成功。

      package main
      
      import (
          "fmt"
          "github.com/boltdb/bolt"
          "log"
      )
      
      func main() {
          db, err := bolt.Open("./my.db", 0600, nil)
          if err != nil {
              panic(err)
          }
          defer db.Close()
      
          // 往db里面插入数据
          err = db.Update(func(tx *bolt.Tx) error {
              bucket, err := tx.CreateBucketIfNotExists([]byte("testDB"))
              if err != nil {
                  log.Fatalf("CreateBucketIfNotExists err:%s", err.Error())
                      return err
                  }
      
              if err = bucket.Put([]byte("hello"), []byte("world")); err != nil {
                  log.Fatalf("bucket Put err:%s", err.Error())
                  return err
              }
              return nil
          })
          if err != nil {
              log.Fatalf("db.Update err:%s", err.Error())
          }
      
          // 从db里面读取数据
          err = db.View(func(tx *bolt.Tx) error {
              bucket := tx.Bucket([]byte("testDB"))
      
              val := bucket.Get([]byte("hello"))
              fmt.Printf("the get val: %s\n", val)
      
              return nil
          })
          if err != nil {
              log.Fatalf("db.View err:%s", err.Error())
          }
      }
      

      输出:


      image.png

    相关文章

      网友评论

          本文标题:BoltDB(一)介绍以及调试代码

          本文链接:https://www.haomeiwen.com/subject/ilvhgrtx.html