zoukankan      html  css  js  c++  java
  • BoltDB简单使用教程

    1.BoltDB简介

    Bolt是一个纯粹Key/Value模型的程序。该项目的目标是为不需要完整数据库服务器(如Postgres或MySQL)的项目提供一个简单,快速,可靠的数据库。

    BoltDB只需要将其链接到你的应用程序代码中即可使用BoltDB提供的API来高效的存取数据。而且BoltDB支持完全可序列化的ACID事务,让应用程序可以更简单的处理复杂操作。

    其源码地址为:https://github.com/boltdb/bolt

    2.BoltDB特性

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

    • 使用Go语言编写

    • 不需要服务器即可运行

    • 支持数据结构

    • 直接使用API存取数据,没有查询语句;

    • 支持完全可序列化的ACID事务,这个特性比LevelDB强;

    • 数据保存在内存映射的文件里。没有wal、线程压缩和垃圾回收;

    • 通过COW技术,可实现无锁的读写并发,但是无法实现无锁的写写并发,这就注定了读性能超高,但写性能一般,适合与读多写少的场景。

    BoltDB是一个Key/Value(键/值)存储,这意味着没有像SQL RDBMS(MySQL,PostgreSQL等)中的表,没有行,没有列。相反,数据作为键值对存储(如在Golang Maps中)。键值对存储在Buckets中,它们旨在对相似的对进行分组(这与RDBMS中的表类似)。因此,为了获得Value(值),需要知道该Value所在的桶和钥匙。

    3.BoltDB的安装

    Linux中:

    $ go get github.com/boltdb/bolt/...

    Windows中:

    1.前提是已经安装GO语言环境.

    2.安装git for windows :

     http://git-for-windows.github.io/

    3.安装Git后才能执行命令:

    go get github.com/boltdb/bolt/...

    来安装第三方包。这条命令它会把 类库包源代码,下载解压到你的 %GOPATH% 路径里面去,比如:C:gogopath   srcgithub.com...
    前面是gopath路径,后面是类库,并且它还会同时执行 go install xxx ,生成 D:gogopathpkgxxxx 这样的包路径。

    注意:

    【在GoLand开发工具中,是可以直接获取GitHub中的源代码的,该方法更便捷!】

    4. 在代码中导入第三方包:

    import (
        "github.com/boltdb/bolt" // 从环境变量:%goPath% 中定义的路径去查找第三方类库
    )

    4.BoltDB简单使用

    4.1 打开或创建数据库

    //1.数据库创建
        //在这里gland直接运行,生成的my.db在main.go上层目录;命令行build在运行的话是当前目录!!!
        db, err := bolt.Open("chaorsBlock.db", 0600, nil)
        if err != nil {
            log.Fatal(err)
        }
        defer db.Close()

    注意:

    如果通过goland程序运行创建的my.db会保存在$GOPATH /src/Project目录下
    如果通过go build main.go ; ./main 执行生成的my.db,会保存在当前目录$GOPATH /src/Project/package下

    4.2 数据库操作

    4.2.1 创建数据库表

    //2.创建表
        err = db.Update(func(tx *bolt.Tx) error {
      
                    //判断要创建的表是否存在
            b := tx.Bucket([]byte("MyBlocks"))
            if b == nil {
      
                    //创建叫"MyBucket"的表
                _, err := tx.CreateBucket([]byte("MyBlocks"))
                if err != nil {
                                    //也可以在这里对表做插入操作
                    log.Fatal(err)
                }
            }
    
            //一定要返回nil
            return nil
        })
    
        //更新数据库失败
        if err != nil {
            log.Fatal(err)
        }

    4.2.2 更新

    //3.更新表数据
        err = db.Update(func(tx *bolt.Tx) error {
    
            //取出叫"MyBucket"的表
            b := tx.Bucket([]byte("MyBlocks"))
    
            //往表里面存储数据
            if b != nil {
                            //插入的键值对数据类型必须是字节数组
                err := b.Put([]byte("l"), []byte("0x0000"))
                err := b.Put([]byte("ll"), []byte("0x0001"))
                            err := b.Put([]byte("lll"), []byte("0x0002"))
                if err != nil {
                    log.Fatal(err)
                }
            }
    
            //一定要返回nil
            return nil
        })
    
        //更新数据库失败
        if err != nil {
            log.Fatal(err)
        }

    4.2.3 查询

    //4.查看表数据
        err = db.View(func(tx *bolt.Tx) error {
    
            //取出叫"MyBucket"的表
            b := tx.Bucket([]byte("MyBlocks"))
    
            //往表里面存储数据
            if b != nil {
    
                data := b.Get([]byte("l"))
                fmt.Printf("%s
    ", data)
                data := b.Get([]byte("l"))
                fmt.Printf("%s
    ", data)
            }
    
            //一定要返回nil
            return nil
        })
    
        //查询数据库失败
        if err != nil {
            log.Fatal(err)
        }
  • 相关阅读:
    C/C++ 读文件
    算法和数据结构 图表示
    protobuf
    C/C++ jsoncpp
    C/C++ C++11作用域枚举
    腾讯云云函数快速入门实践
    Serverless 与 Flask 框架结合进行 Blog 开发
    从企业微信机器人到小爱同学,用 Serverless 实现生活智能化!
    基于 Serverless 与 Websocket 的聊天工具实现
    云函数 SCF 与对象存储实现 WordCount 算法
  • 原文地址:https://www.cnblogs.com/X-knight/p/10753833.html
Copyright © 2011-2022 走看看