boltDB的运用与实践
【摘要】 本文档记录了BoltDB从安装到实现基本增删改查功能的GoLang实现过程。
环境:OS=Win10;GoVersion=1.19;IDE=VSCode
BoltDB入门实践
本文档记录了BoltDB从安装到实现基本增删改查功能的GoLang实现过程。
环境:OS=Win10;GoVersion=1.19;IDE=VSCode
1、安装
进入某一个含有go.mod文件的文件夹下,安装boltdb软件包:
go get github.com/boltdb/bolt
2、创建DB文件
使用下面的代码(在main函数中)创建一个my.db数据库。
db, err := bolt.Open("my.db", 0600, nil)
if err != nil {
log.Fatal(err)
}
defer db.Close()
注释:
- 这个数据库是不可以直接打开的!
- 函数
bolt.Open
的作用是打开一个.db文件。如果本身不存在默认新建一个空的。各个参数的含义如下:"my.db"
:数据库文件的名称,可以自定义,也可以使用绝对路径或相对路径。0600
:文件权限,表示只有文件所有者具有读写权限,其他用户没有任何权限。具体为:- 0表示前缀,表示八进制数;
- 6表示文件所有者具有读写权限;
- 0表示其他用户没有任何权限。
nil
:Bolt数据库的配置选项,可以设置为nil,表示使用默认配置选项。如果需要自定义配置选项,可以使用bolt.Options类型的变量来设置。
3、建桶(表)
桶(Bucket)类似于关系数据库中的表(table)。一个桶里存放若干个key-value对,也就是关系数据库中的元组(tuple)。建桶的方法如下:
err = db.Update(func(tx *bolt.Tx) error {
b, err := tx.CreateBucketIfNotExists([]byte("BlockBucket")) // 桶的名称必须为[]byte
if err != nil {
log.Panic(err)
// return fmt.Errorf("create bucket: %v", err)
}
return nil
})
注释:
db.Update(func(tx *bolt.Tx) error {...})
表示一个读写事务,任何增、删、改操作都必须写在里面。db.View(func(tx *bolt.Tx) error {...})
表示一个只读事务,任何读操作都必须写在里面。tx.CreateBucketIfNotExists
用于新建一个表- 桶的相关名称,如桶名称、Key-value等,全部都必须转换为
[]byte
格式存储,读出的时候再转换回string
或其他类型。
4、添加数据
数据以KV的形式存储于各个桶中。添加数据的方法如下:
err = db.Update(func(tx *bolt Tx) error {
// 先获取表 BlockBucket
b := tx.Bucket([]byte("BlockBucket"))
// 再往表里面存储数据
if b != nil {
err := b.Put([]byte("001"), []byte("alias"))
if err != nil {
log.Panic("数据操作失败")
}
}
return nil
})
注释:
- 添加数据的步骤:先通过
tx.Bucket
获取表,再使用b.Put
添加数据。前者是必要的,因为只有获取到表b
才能调用其Put
函数。 b.Put
函数传入两个参数:代存储的Key和value,都转换为[]byte
格式。
5、检索数据
使用下面的代码检索已经存储在表中的数据:
err = db.View(func(tx *bolt.Tx) error {
// 获取BlockBucket表对象
b := tx.Bucket([]byte("BlockBucket"))
// 从表中读取数据
if b != nil {
data := b.Get([]byte("001"))
fmt.Printf("%s\n", string(data))
}
return nil
})
注释:
检索数据的步骤:同样地,先获取表b,再使用b.Get方法:传入检索的Key,返回对应的Value
输出需要进行类型转换。
6、删除数据
将4中的
err := b.Put([]byte("001"), []byte("alias"))
改为Delete方法:
err := b.Delete([]byte("001"))
即可删除Key='001’的数据条目。
7、修改数据
和Put方法的使用完全一致。由于同一个表中,一个Key只能对应一个唯一的Value,因此我们只需要使用Put覆盖掉原数据即可。例如:
err = db.Update(func(tx *bolt Tx) error {
// 先获取表 BlockBucket
b := tx.Bucket([]byte("BlockBucket"))
// 再往表里面存储数据
if b != nil {
// 添加数据
err := b.Put([]byte("001"), []byte("alias"))
if err != nil {
log.Panic("数据添加失败")
}
// 修改数据
err = b.Put([]byte("001"), []byte("Flias"))
if err != nil {
log.Panic("数据修改失败")
}
}
return nil
})
此时,表BlockBucket中Key='001'
的数据就会被修改。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)