boltdb转mysql_BoltDB简单使用教程

1.BoltDB简介

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

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

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 :

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

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

来安装第三方包。这条命令它会把 类库包源代码,下载解压到你的 %GOPATH% 路径里面去,比如:C:\go\gopath\   src\github.com\...

前面是gopath路径,后面是类库,并且它还会同时执行 go install xxx ,生成 D:\go\gopath\pkg\xxxx 这样的包路径。

注意:

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

8d7104bb5ce0514e22e3c117efc87335.png

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

returnnil

})//更新数据库失败

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

returnnil

})//更新数据库失败

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\n", data)

data := b.Get([]byte("l"))

fmt.Printf("%s\n", data)

}//一定要返回nil

returnnil

})//查询数据库失败

if err !=nil {

log.Fatal(err)

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值