超级账本学习笔记(9)-CouchDB

前言

不知不觉,研究生三年的时光即将告一段落,毕业在即。回想起当初学习的场景,那时候笔记本上记满了密密麻麻的笔记,如今想要扔掉却又舍不得。因此,我决定将当初刚入门区块链时的学习笔记分享出来。由于是跨考的,所以当时的我对区块链甚至是计算机都一窍不通,直接开始了学习之旅。因此,笔记中可能存在一些错误,仅供参考,切勿直接照搬。希望读者能够在阅读的过程中保持思考,同时,大体逻辑是可靠的。如果发现了任何错误,请务必告知我,我将及时进行修改。

10.1 CouchDB简介

CouchDB是面向文档的新型数据库管理系统,而不是传统的关系型数据库。CouchDB是一种 NoSQL的解决方案,以键值映射的方式存储文档字段。CouchDB是 Apache Software Foundation开源项目下的一个顶级项目,可以安装在Linux、Mac 0S X和Windows (x64)等操作系统上。

HyperLedger Fabric中使用CouchDB替代默认的LevelDB作为状态数据库(State Database),保存智能合约中操作的业务数据。当数据值建模为JSON时,除了支持LevelDB支持的keyed/composite-key/keyrange查询以外,还支持丰富的数据查询功能,如针对整个区块链数据的非键查询等。

CouchDB是可以通过RESTful API方式提供调用的键值数据库,通过http 请求操作数据库。

10.2 CouchDB 部署

HyperLedger Fabric 的默认数据库是LevelDB,它是Peer的本地数据库,与Peer是一对一的关系。当替换为CouchDB时,也需要每个Peer对应一个CouchDB 数据库。

1.镜像下载

在第4章Fabric基础环境搭建的镜像下载中已提供下载方式,如果未下载,可以直接执行如下命令完成下载。

docker pull hyperledger/fabric-couchdb:latest

下载完成,通过docker images命令查看是否安装成功,如果出现图10-1所示的结果,表示安装成功。

2.服务启动

服务启动可以通过两种方式,一种是命令行启动,另一种是Docker启动。

(1)命令行启动

CouchDB启动时需要指定一个本地文件夹用于CouchDB的数据存储,执行如下命令启动CouchDB。

 cd $GOPATH/src/github.com/hyperledger/fabric/kafkapeer

 mkdir mycouchdb

docker run -p 5984:5984 -d --name mycouchdb -e COUCHDB_USER=admin  -e COUCHDB_PASSWORD=123456 -v  ~/couchdb:/opt/couchdb/data hyperledger/fabric-couchdb:latest

(2)Docker 启动(还未实验)

Docker启动需要修改Peer的yaml配置文件,加入CouchDB的启动配置项,并修改Peer的environment的参数,切换到CouchDB数据库,配置如下。

services:

  couchdb:

    container_name: couchdb

    image: hyperledger/fabric-couchdb

# Comment/Uncomment the port mapping if you want to hide/expose the CouchDB service,

    # for example map it to utilize Fauxton User Interface in dev environments.

    ports:

      - "5984:5984"

  peer0.org1.example.com:

    container_name: peer0.org1.example.com

    hostname: peer0.org1.example.com

    image: hyperledger/fabric-peer

    environment:

       - CORE_LEDGER_STATE_STATEDATABASE=CouchDB

       - CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS=couchdb:5984

     …

通过启动Peer服务,一并启动CouchDB,命令如下。

docker-compose -f docker-compose-peer.yaml up -d

3.Web管理

CouchDB按以上两种方式启动服务后,可以通过浏览器访问,进行数据库后台管理操作,访问地址为http://192.168.203.3:5984/_utils,CouchDB界面如图10-2所示。

图10-2 CouchDB界面

界面功能简介如表10-1所示。

表10-1 界面功能简介

10.3 CouchDB接口

CouchDB接口分为服务接口、数据库接口、文档接口和设计文档接口,本节简要介绍主要接口的调用方式,接口的详细介绍请访问CouchDB官方教程。

1.检查数据库是否已经安装和运行

运行如下命令检查数据库是否已经安装和运行

# curl http://192.168.203.3:5984/

返回结果如下。

{"couchdb":"Welcome","version":"2.1.1","features":["scheduler"],"vendor":{"name":"The Apache Software Foundation"}}

2.创建数据库

运行如下命令创建数据库。

# curl -X PUT http://admin:123456@192.168.203.3:5984/mydb

返回结果如下。

{"ok":true}

错误

{"error":"unauthorized","reason":"You are not a server admin."}

添加admin:123456

3.检查新建的数据库

运行如下命令检查新建的数据库。

# curl http://192.168.203.3:5984/mydb

返回结果如下。

{"db_name":"mydb","update_seq":"0-g1AAAAEzeJzLYWBg4MhgTmHgzcvPy09JdcjLz8gvLskBCjMlMiT J____PyuRAYeCJAUgmWSPX40DSE08fjUJIDX1eNXksQBJhgYgBVQ2n5C6BRB1-wmpOwBRd5-QugcQdSD3ZQEAiJJi9g","sizes":{"file":33920,"external":0,"active":0},"purge_seq":0,"other":{"data_size":0},"

doc_del_count":0,"doc_count":0,"disk_size":33920,"disk_format_version":6,"data_size":0,"compact_running":false,"cluster":{"q":8,"n":1,"w":1,"r":1},"instance_start_time":"0"}

4.添加文档

运行如下命令添加文档。

#

curl -H "Content-Type:application/json" -X POST http://192.168.203.3:5984/mydb -d'{"_id":"docid1","name":"docname"}'

返回结果如下。

{"ok":true,"id":"docid1","rev":"1-9615e15cc981ebfda6474d163523fdeb"}

5.读取文档

运行如下命令读取文档。

# curl http://192.168.203.3:5984/mydb/docid1

返回结果如下。

{"_id":"docid1","_rev":"1-9615e15cc981ebfda6474d163523fdeb","name":"docname"}

6.修改文档

运行如下命令修改文档。

# curl -X PUT http://192.168.203.3:5984/mydb/docid1 -d '{"_id":"docid1","_rev":"1-9615e15cc981ebfda6474d163523fdeb","name":"docname1","title":"title1"}'

返回结果如下。

{"ok":true,"id":"docid1","rev":"2-693b8762583b6bca27fcd0235de72186"}

7.删除文档

运行如下命令删除文档。

#

curl -X DELETE http://192.168.203.3:5984/mydb/docid1?rev=2-693b8762583b6bca27fcd0235de72186

返回结果如下。

{"ok":true,"id":"docid1","rev":"2-693b8762583b6bca27fcd0235de72186"}

8.查看所有文档

运行如下命令查看所有文档。

# curl http://192.168.203.3:5984/mydb/_all_docs

返回结果如下。

{"total_rows":1,"offset":0,"rows":[

{"id":"docid1","key":"docid1","value":{"rev":"2-693b8762583b6bca27fcd0235de72186"}}

]}

9.删除数据库

运行如下命令删除数据库。

# curl -X DELETE http://admin:123456@192.168.203.3:5984/mydb

返回结果如下。

{"ok":true}

10.4 CouchDB生产环境应用

在第8章Fabric Kafka生产环境部署的环境基础上,把Peer上的LevelDB数据库替换为CouchDB,在每个Peer的配置文件中做相应修改,即可切换为CouchDB数据库,配置以服务器192.168.235.7中的docker-compose-peer.yaml为例,其他服务器参照该yaml配置文件

修改后的docker-compose-peer.yaml(启动Peer服务配置文件)配置如下。

当创建通道、加入通道、执行智能合约后,Peer对应的CouchDB数据库中会生成mychannel_、mychannel_lscc和mychannel_mycc 3个数据库,界面如图10-3所示。

图10-3 CouchDB数据库

(1)mychannel_:保存通道相关的数据,界面如图10-4所示。

图10-4 CouchDB mychannel_

(2)mychannel_lscc:保存系统链码数据,界面如图

10-5所示。

图10-5 CouchDB mychannel_lscc

(3)mychannel_mycc:保存用户链码数据,生成a和b的键值对数据,界面如图10-6所示。

图10-6 CouchDB mychannel_mycc

10.5 本章小结

HyperLedger Fabric中数据库默认使用LevelDB作为状态数据库,本章主要介绍了如何使用CouchDB以替换LevelDB。

CouchDB是面向文档的数据库管理系统,而不是传统的关系型数据库。本章从

面向文档的新型数据库的基本概念开始,依次介绍了CouchDB部署和涉及的接

口,最后在第8章Fabric Kafka生产环境部署实例的基础上,替换Peer数据库,介绍了在生产环境中使用CouchDB进行配置和操作等知识

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值