Fabric启用CouchDB

Fabric启用CouchDB状态数据库简介 LevelDB 是默认的状态数据库 LevelDB 是采用 C 编写的一种高性能嵌入式数据库 没有独立的数据库进程 占用资源少 速度快 CouchDB 是一种文档型数据库 提供了 RESTful 的 API 操作数据库文档 CouchDB 支持原生的 JSON 和字节数组的操作 基于 JSON 的操作 支持复查询 尤其是从 Fabric1 3 版本开始 支持分页 启用 CouchDBdocke

状态数据库

启用CouchDB

  编写节点配置文件及CouchDB配置文件docker-compose-couchdb.yaml

version: '2' services: couchdb0: container_name: couchdb0 image: hyperledger/fabric-couchdb # Populate the COUCHDB_USER and COUCHDB_PASSWORD to set an admin user and password # for CouchDB. This will prevent CouchDB from operating in an "Admin Party" mode. environment: - COUCHDB_USER= - COUCHDB_PASSWORD= # 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" 

  以上为最简配置,仅包含用户名、密码、端口等信息,更多配置项可查阅相关的资料。启动CouchDB容器:

docker-compose -f ../docker-compose-couchdb.yaml up -d 

  在peer节点的配置文件中增加以下配置项

- CORE_LEDGER_STATE_STATEDATABASE=CouchDB - CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS=couchdb0:5984 # The CORE_LEDGER_STATE_COUCHDBCONFIG_USERNAME and CORE_LEDGER_STATE_COUCHDBCONFIG_PASSWORD # provide the credentials for ledger to connect to CouchDB. The username and password must # match the username and password set for the associated CouchDB. - CORE_LEDGER_STATE_COUCHDBCONFIG_USERNAME - CORE_LEDGER_STATE_COUCHDBCONFIG_PASSWORD= 

  启动相应容器,OK,基础环境已经完成。

链码常见API

 GetState(key string) ([]byte, error) PutState(key string, value []byte) error GetStateByRange(startKey, endKey string) (StateQueryIteratorInterface, error) GetStateByPartialCompositeKey(objectType string, keys []string) (StateQueryIteratorInterface, error) 

  对于CouchDB的富查询,API提供了 GetQueryResult(query string) (StateQueryIteratorInterface, error) 接口,其中参数query string格式参考CouchDB JSON 查询语法

{ "selector": { "year": {"$gt": 2010} }, "fields": ["_id", "_rev", "year", "title"], "sort": [{"year": "asc"}], "limit": 2, "skip": 0, "execution_stats": true } 

CouchDB分页

GetStateByRangeWithPagination(startKey, endKey string, pageSize int32, bookmark string) (StateQueryIteratorInterface, *pb.QueryResponseMetadata, error) GetStateByPartialCompositeKeyWithPagination(objectType string, keys []string, pageSize int32, bookmark string) (StateQueryIteratorInterface, *pb.QueryResponseMetadata, error) GetQueryResultWithPagination(query string, pageSize int32, bookmark string) (StateQueryIteratorInterface, *pb.QueryResponseMetadata, error) 

  指定查询数量(pageSize )和书签(bookmark ),接口返回数据和下次查询的书签(对于初次查询,书签传入空字符串“”),分页查询是只读的,为了避免查询时间过长,所有的链码查询返回结果数据的最大条数都由core.yaml中的totalQueryLimit(默认值为)限定。另外无论是否启用分页,peer都会根据core.yaml中的internalQueryLimit(默认值为1000)分批查询CouchDB,以保障性能。

CouchDB索引

  索引使JSON查询更高效,并且对应排序(sort)而言,创建索引是必须的。使用方法:在链码文件所在目录,创建META-INF / statedb / couchdb / indexes目录,每个索引必须在扩展名为.json的文本文件中定义,遵循CouchDB索引的基本语法. 例如:

{"index":{"fields":["docType","owner"]},"ddoc":"indexOwnerDoc", "name":"indexOwner","type":"json"} 

通过CouchDB Fauxton interface

  CouchDB Fauxton interface 是一个WEB UI,支持外部创建索引,更新索引,地址:http://localhost:5984/_utils

通过POST请求

curl -i -X POST -H "Content-Type: application/json" -d "{\"index\":{\"fields\":[\"docType\",\"owner\"]}, \"name\":\"indexOwner\", \"ddoc\":\"indexOwnerDoc\", \"type\":\"json\"}" http://hostname:port/mychannel_marbles/_index 
curl -X DELETE http://localhost:5984/mychannel_marbles/_index/indexOwnerDoc/json/indexOwner -H "accept: */*" -H "Host: localhost:5984" 

  命令格式

curl -X DELETE http://localhost:5984/{ 
   database_name}/_index/{ 
   design_doc}/json/{ 
   index_name} -H "accept: */*" -H "Host: localhost:5984" 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/211251.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午10:52
下一篇 2026年3月18日 下午10:52


相关推荐

  • python爬取豆瓣电影榜单

    python爬取豆瓣电影榜单python爬取豆瓣电影榜单python爬取豆瓣电影榜单并保存到本地excel中,以后就不愁没片看了。目标确定我们想要抓取的电影的相关内容。抓取豆瓣top250电影的排名、电影名、评价(总结很到位)、评分、点评人数及电影的豆瓣页面。抓取各种电影类型的排行榜前100。编码省略需求到编码中间的繁文缛节,直接上手编码。(此处是最终编码)目标一使用BeautifulSoup解析页面查找元素。目标二调用接口处理返回的json数据。importrequestsimportopenpyx

    2022年5月28日
    38
  • 什么是QT?「建议收藏」

    什么是QT?「建议收藏」为学习QT首先必须搞明白的一个问题是,什么是QT,查找资料,对于QT有如下的认识:1.Qt是一个跨平台的C++图形用户界面应用程序框架Qt是面向对象的框架,提供了一种称为signals/slots的安全类型来实现各个元件之间的协同工作。2.Qt是一个跨平台的应用程序开发类库Qt包括多达250个以上的C++类,还替供基于模板的collections,serialization,file,I/Odevice,directorymanagement,date/t

    2022年5月17日
    46
  • (python源码,详细注解 )多目标粒子群算法 mopso

    (python源码,详细注解 )多目标粒子群算法 mopso1本代码功能用多目标粒子群算法(mopso)寻找pareto最优解集2算法介绍2.1简单步骤:(1)初始化群体粒子群的位置和速度,计算适应值(2)根据pareto支配原则,计算得到Archive集(存放当前的非劣解)(3)计算pbest(4)计算Archive集中的拥挤度(5)在Archive集选择gbest(6)更新粒子的速度、位置、适应值(7)更新Archive集(还要注意防止溢出)(…

    2022年5月2日
    73
  • Flask—jsonify方式(api接口)「建议收藏」

    Flask—jsonify方式(api接口)「建议收藏」GET方法post方法PUT方法DELETE方法GET方法fromflaskimportFlask,jsonify,abort,make_responseapp=Flask(__name__)articles=[{‘id’:1,’title’:’thewaytopyt…

    2022年5月10日
    42
  • SQL优化的N种方法

    SQL优化的N种方法1 SQL 语句中 IN 包含的值不应过多 2 SELECT 语句务必指明字段名称 3 只查询一条数据的时候 使用 limit14 避免在 where 子句中对字段进行 null 值判断 5 避免在 where 子句中对字段进行表达式操作 6 对于联合索引来说 要遵守最左前缀法则 7 尽量使用 innerjoin 避免 leftjoin8 注意范围查询语句 9 不建议使用 前缀模糊查询 10 在 where 子句中使用 or 来连接条件 如果 or 连接的条件有一方没有索引 将导致引擎放弃使用索引而进行全表扫描

    2026年3月18日
    2
  • 同步调用与异步调用

    同步调用与异步调用同步调用和异步调用是两种提交任务的方式同步调用:提交完任务后,就在原地等待任务执行完毕,拿到运行结果/返回值后再执行下一步,同步调用下任务是串行执行。异步调用:提交完任务后,不会再原地等待任务执行完毕,直接执行下一行代码,异步调用时并发执行。异步调用,几乎同时下达任务fromconcurrent.futuresimportProcessPoolExecutorimport…

    2022年7月11日
    26

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号