Fabric 1.0源代码分析(23)LevelDB(KV数据库)

本文深入分析了Hyperledger Fabric 1.0中使用的LevelDB数据库,LevelDB作为关键值(KV)存储在区块链系统中的应用。文章探讨了其在区块链数据持久化和查询中的作用,以及在Fabric中的具体实现细节。
摘要由CSDN通过智能技术生成
# Fabric 1.0源代码笔记 之 LevelDB(KV数据库)

## 1、LevelDB概述

LevelDB是Google开源的持久化KV单机数据库,具有很高的随机写,顺序读/写性能,但是随机读的性能很一般,也就是说,LevelDB很适合应用在查询较少,而写很多的场景。

LevelDB的特点:
* key和value都是任意长度的字节数组;
* entry(即一条K-V记录)默认是按照key的字典顺序存储的,当然开发者也可以重载这个排序函数;
* 提供的基本操作接口:Put()、Delete()、Get()、Batch();
* 支持批量操作以原子操作进行;
* 可以创建数据全景的snapshot(快照),并允许在快照中查找数据;
* 可以通过前向(或后向)迭代器遍历数据(迭代器会隐含的创建一个snapshot);
* 自动使用Snappy压缩数据;
* 可移植性;

Fabric中使用了goleveldb包,即https://github.com/syndtr/goleveldb/。

goleveldb的基本操作:

* 打开数据库,db, err:=leveldb.OpenFile("./db", nil)。作用就是在当前目录下创建一个db文件夹作为数据库的目录。
* 存储键值,db.Put([]byte("key1"),[]byte("value1"),nil)。作用就是在数据库中存储键值对 key1-value1。leveldb数据库中对键值的操作都是byte格式化的数据。
* 获取键值对,data,_ := db.Get([]byte("key1"),nil),获取key1对应的值。
* 遍历数据库,iter := db.NewIterator(nil, nil),for iter.Next(){ fmt.Printf("key=%s,value=%s\n",iter.Key(),iter.Value()) },iter.Release()。作用就是建立迭代器iter,然后依次遍历数据库中所有的数据并打印键和值,最后释放迭代器iter。
* 关闭数据库,db.Close()。

Fabric中LevelDB代码,分布在common/ledger/util/leveldbhelper目录,目录结构如下:

* leveldb_provider.go,定义了结构体Provider、Provider、UpdateBatch、Iterator及其方法。
* leveldb_helper.go,定义了DB结构体及方法。

## 2、DB结构体及方法

DB结构体定义:对实际数据存储的包装。

```go
type Conf struct {
    DBPath string
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尹成

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值