区块链数据如何持久化--GO语言与boltDB保证区块链断开进程后区块数据持久化存储...

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第11天,点击查看活动详情

区块链数据如何持久化

使用pow挖矿,但是数据都是保存在内存中的,它们会随着进程的终止而消失,因此我们需要使用一个数据库来记录区块数据,使得区块数据持久化存储。

GP语言与blotDB

为什么要选择blotDB数据库? 因为对我们的需求而言,我们需要不需要安装且移植方便的一款数据库,而bolt数据库是一款纯GO语言编写、内嵌型的数据库,它的API非常小巧简洁,主要有文件和bucket(桶)两层结构,kev/val键值对存储在bucket中。

1、打开数据库

go //导入bolt包 import "github.om/boltdb/bolt" //打开数据库 db,err:=bolt.Open("my.db",0600,nil) if err !=nil{ log.Fatal(err) } defer db.Close() 我们看看他Open的一些参数: 第一个参数 path :代表数据库文件

第二个参数 mode:代表设置文件的权限(一般是仅限本用户可读写0600)

第三个参数:options:用来设置文件权限

2、Update和View

对于DB对象,我们主要使用Update和View两种方法,分别对应更新和查看。 go func (db *DB)Update(fn func(*Tx) error)error func (db *DB)View(fn func(*Tx) error)error 这两种方法关键点在于它们内部都要传入一个函数,这个函数参数是*Tx类型,Tx是boltDB的交易结构。CreateBucker和Bucket两种关键方法,CreateBucker用来创建bucket,Bucket用来获取bucket.通过Tx可以获得Bucket对象,Bucket里我们只需关注Put和Get两种方法

总结

先通过Open获得数据库对象DB,通过DB创建一个Bucket对象,再利用Bucket对象调用Put方法插入一组键值对。 代码如下 ```go func main(){ //打开数据库 db,:=bolt.Open("my.db",0600,nil) defer db.Close() //插入数据库数据 db.Update(func(tx *bolt.Tx)error{ //创建bucket bucket,:=tx.CreateBucket([]byte("bucket1") //设置key-val bucket.Put([]byte("name"),[]byte("小明")) return nil }) //查询数据库 db.View(func(tx *bolt.Tx)error{ //获取bucket bucket :=tx.Bucket([]byte(bucket1)) //获取key-val val:=bucket.Get([]byte("name")) fmt.Println(string(val)) return nil

})

} ```

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值