此类型的变量不支持使用点进行索引如何解决_Hyperledger Fabric使用CouchDB

本教程将介绍将CouchDB用作Hyperledger Fabric的状态数据库所需的步骤。到目前为止,您应该熟悉Fabric概念并探索了一些示例和教程。在Fabric v2.0中作为Alpha功能引入的Fabric链代码生命周期不支持在CouchDB中使用索引。因此,本教程需要先前的生命周期过程来安装和实例化包含CouchDB索引的链代码。下载Fabric Samples的1.4版本以...
摘要由CSDN通过智能技术生成

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

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

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

  1. 在Hyperledger Fabric中启用CouchDB

  2. 创建索引

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

  4. 安装并实例化Chaincode

  5. 查询CouchDB状态数据库

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

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

  8. 更新索引

  9. 删除索引

要深入了解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"`
}

在此结构中,属性(docTypenamecolorsize, owner)定义与资产相关联的分类账数据。该属性 docType是链代码中使用的模式,用于区分可能需要单独查询的不同数据类型。使用CouchDB时,建议包含此docType属性以区分chaincode命名空间中的每种类型的文档。(每个链代码都表示为自己的CouchDB数据库,也就是说,每个链代码都有自己的密钥命名空间。)

关于Marbles数据结构,docType用于标识此文档/资产是大理石资产。可能在链代码数据库中可能存在其他文档/资产。数据库中的文档可以针对所有这些属性值进行搜索。

在定义用于链代码查询的索引时,每个索引必须在其自己的文本文件中定义,扩展名为* .json,索引定义必须以CouchDB索引JSON格式进行格式化。

要定义索引,需要三条信息:

  • 字段:这些是经常查询的字段

  • name:索引的名称

  • type:在这种情况下总是json

例如,为名为foo-index的字段命名的简单索引foo

{
    
"index": {
"fields": ["foo"]
},
"name" : "foo-index",
"type" : "json"
}

可选地,ddoc可以在索引定义上指定设计文档属性。一个设计文档是CouchDB的结构设计,包含索引。索引可以分组到设计文档中以提高效率,但CouchDB建议每个设计文档使用一个索引。

定义索引时,最好将ddoc 属性和值与索引名称一起包含在内。包含此属性非常重要,以确保您可以在以后需要时更新索引。此外,它还使您能够显式指定要在查询上使用的索引。

以下是Marbles示例中索引定义的另一个示例,索引名称indexOwner使用多个字段docTypeowner 并且包含以下ddoc属性:

{
    
"index":{
"fields":["docType","owner"] // Names of the fields to be queried
},
"ddoc":"indexOwnerDoc", // (optional) Name of the design document in which the index will be created.
"name":"indexOwner",
"type":"json"
}

在上面的示例中,如果设计文档indexOwnerDoc尚不存在,则在部署索引时会自动创建该文档。可以使用字段列表中指定的一个或多个属性构造索引,并且可以指定任何属性组合。对于同一docType,属性可以存在于多个索引中。在以下示例中,index1 仅包括属性ownerindex2包括属性 并包含属性。另外,请注意每个索引定义都有自己的值,遵循CouchDB建议的做法。owner and colorindex3owner, color and sizeddoc

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值