2021-11-09
来源:华纳网
责任编辑:韩玉玲
人气:
核心提示:非常好用KV数据库BoltDB
知识点:
KV数据库BoltDB
本课内容:
大家好,欢迎来到谷雨课堂,
BoltDB是非常出名的纯Go实现的KV读写引擎
BoltDB源码清晰,
没有太多坑(可能谷雨老师还没遇到),
就是经典的BTree,
非常可控的
etcd和consul都用使用了BlotDB,
他的性能不是最多高,
而是其简单可靠,
Raft就是为了稳定,
如果最底层的读写引擎出错,
那就失去了全部意义
此外B+Tree天然优势,
随机查询比LSMT快
以下是全部代码:
package main
import (
"fmt"
"io/ioutil"
"log"
"github.com/boltdb/bolt"
)
func getFile(f string) []byte {
b, _ := ioutil.ReadFile(f)
return b
}
func main() {
// 创建或者打开数据库
db, err := bolt.Open("my.db", 0600, nil)
if err != nil {
log.Fatal(err)
}
defer db.Close()
// 创建表
err = db.Update(func(tx *bolt.Tx) error {
b, err := tx.CreateBucket([]byte("MyBucket"))
if err != nil {
fmt.Printf("create bucket: %s", err)
}
// 获取BlockBucket表单
b = tx.Bucket([]byte("MyBucket"))
// 往表里面存储数据
if b != nil {
err := b.Put([]byte("file1"), getFile("d:/soft/BaiduNetdisk_7.0.10.2.exe"))
if err != nil {
log.Panic("数据存储失败......")
}
}
// 返回nil,以便数据库处理相应操作
return nil
})
//更新失败
if err != nil {
log.Panic(err)
}
// 查看数据
err = db.View(func(tx *bolt.Tx) error {
// 获取BlockBucket表对象
b := tx.Bucket([]byte("MyBucket"))
// 往表里面存储数据
if b != nil {
data := b.Get([]byte("file1"))
//ioutil.WriteFile("1.exe", data, 0644)
fmt.Printf("%d\n", len(data))
}
// 返回nil,以便数据库处理相应操作
return nil
})
//更新失败
if err != nil {
log.Panic(err)
}
}
完整的源代码可以登录【华纳网】下载。
https://www.worldwarner.com/
免责声明:本文仅代表作者个人观点,与华纳网无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。