当前位置: 首页 > >

此类型变量不支持使用点进行索引_Hyperledger Fabric使用CouchDB

发布时间:

本教程将介绍将CouchDB用作Hyperledger Fabric的状态数据库所需的步骤。到目前为止,您应该熟悉Fabric概念并探索了一些示例和教程。


在Fabric v2.0中作为Alpha功能引入的Fabric链代码生命周期不支持在CouchDB中使用索引。因此,本教程需要先前的生命周期过程来安装和实例化包含CouchDB索引的链代码。下载Fabric Samples的1.4版本以使用本教程。有关更多信息,请参阅将索引添加到chaincode文件夹。


本教程将指导您完成以下步骤:


    在Hyperledger Fabric中启用CouchDB

    创建索引

    将索引添加到您的chaincode文件夹

    安装并实例化Chaincode

    查询CouchDB状态数据库

    使用查询和索引的最佳实践

    使用分页查询CouchDB状态数据库

    更新索引

    删除索引


要深入了解CouchDB,请将CouchDB称为状态数据库?,有关Fabric分类帐的更多信息,请参阅Ledger?主题。请按照以下教程获取有关如何在区块链网络中利用CouchDB的详细信息。


在本教程中,我们将使用Marbles示例?作为我们的用例来演示如何将CouchDB与Fabric配合使用,并将Marbles部署到构建您的第一个网络(BYFN)教程网络。您应该已完成安装示例,二进制文件和Docker镜像的任务。但是,运行BYFN教程不是本教程的先决条件,而是在本教程中提供必要的命令以使用网络。


为何选择CouchDB?

Fabric支持两种类型的对等数据库。LevelDB是嵌入在对等节点中的默认状态数据库,它将链代码数据存储为简单的键值对,仅支持键,键范围和复合键查询。CouchDB是一个可选的备用状态数据库,当链代码数据值建模为JSON时,它支持富查询。当您要查询实际数据值内容而不是密钥时,富查询对大型索引数据存储更灵活,更高效。CouchDB是一个JSON文档数据存储区而不是纯键值存储区,因此可以索引数据库中文档的内容。


为了利用CouchDB的优势,即基于内容的JSON查询,您的数据必须以JSON格式建模。在设置网络之前,您必须决定是使用LevelDB还是CouchDB。由于数据兼容性问题,不支持将对等体从使用LevelDB切换到CouchDB。网络上的所有对等方必须使用相同的数据库类型。如果混合使用JSON和二进制数据值,仍可以使用CouchDB,但只能根据键,键范围和组合键查询查询二进制值。


在Hyperledger Fabric中启用CouchDB

CouchDB作为独立的数据库进程与对等方一起运行,因此在设置,管理和操作方面还有其他注意事项。?可以使用CouchDB的docker镜像,我们建议它在与同级服务器相同的服务器上运行。您需要为每个对等设置一个CouchDB容器,并通过更改找到的配置core.yaml来更新每个对等容器?以指向CouchDB容器。该core.yaml?文件必须位于环境变量FABRIC_CFG_PATH指定的目录中:


对于docker部署,core.yaml已预先配置并位于对等容器FABRIC_CFG_PATH文件夹中。但是,在使用docker环境时,通常通过编辑docker-compose-couch.yaml?来覆盖core.yaml?来传递环境变量

对于本机二进制部署,core.yaml包含在发布工件分发中。


编辑stateDatabase部分core.yaml。指定CouchDB的?stateDatabase,并在填写相关couchDBConfig性。有关配置CouchDB以使用结构的更多详细信息,请参阅此处。以查看配置用于CouchDB的一个core.yaml文件的一个例子,检查BYFN?docker-compose-couch.yamlHyperLedger/fabric-samples/first-network?目录中。


创建索引

为什么索引很重要?


索引允许查询数据库,而不必检查每个查询的每一行,使它们运行得更快,更有效。通常,索引是针对频繁出现的查询条件构建的,允许更有效地查询数据。要利用CouchDB的主要优势 - 能够针对JSON数据执行丰富查询 - 不需要索引,但强烈建议使用它们来提高性能。此外,如果查询中需要排序,CouchDB需要排序字段的索引。


没有索引的富查询将起作用,但可能会在CouchDB日志中发出未找到索引的警告。但是,如果富查询包含排序规范,则需要该字段的索引;?否则,查询将失败并将引发错误。


为了演示构建索引,我们将使用Marbles示例中的数据。在此示例中,Marbles数据结构定义为:


type marble struct {
ObjectType string `json:"docType"` //docType is used to distinguish the various types of objects in state database
Name string `json:"name"` //the field tags are needed to keep case from bouncing around
Color string `json:"color"`
Size int `json:"size"`
Owner string `json:"owner"`
},
},
},
},
},
}
queryString := args[0]
queryResults, err := getQueryResultForQueryString(stub, queryString)
}
}
queryString := args[0]
pageSize, err := strconv.ParseInt(args[1], 10, 32)
}
bookmark := args[2]
queryResults, err := getQueryResultForQueryStringWithPagination(stub, queryString, int32(pageSize), bookmark)
}
{"Key":"marble2", "Record":{"color":"yellow","docType":"marble","name":"marble2","owner":"tom","size":35}},
{"Key":"marble3", "Record":{"color":"green","docType":"marble","name":"marble3","owner":"tom","size":20}}]
{"Key":"marble5", "Record":{"color":"blue","docType":"marble","name":"marble5","owner":"tom","size":40}}]
"name":"indexOwner",
"ddoc":"indexOwnerDoc",
"type":"json"}" http://hostname:port/mychannel_marbles/_index

如果您使用的是使用CouchDB配置的BYFN,请将hostname:port替换为localhost:5984


删除索引

索引删除不受Fabric工具管理。如果需要删除索引,请手动对数据库发出curl命令或使用Fauxton接口将其删除。


删除索引的curl命令的格式为:


curl -X DELETE http://localhost:5984/{database_name}/_index/{design_doc}/json/{index_name} -H "accept: */*" -H "Host: localhost:5984"

要删除本教程中使用的索引,curl命令将是:

curl -X DELETE http://localhost:5984/mychannel_marbles/_index/indexOwnerDoc/json/indexOwner -H "accept: */*" -H "Host: localhost:5984"







相关资源:MATLAB读取显示txt格式点云(带数据)



友情链接: