美文网首页
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