当使用CouchDB作为分类帐状态数据库时,数据存储在HyperLeDger结构中如何



我正在为开发人员教程中运行代码,以运行基本的示例链码在LEDGER上创建资产(键值配对)。

我能够使用CLI

调用链条
peer chaincode invoke -n mycc -c '{"Args":["set", "a", "20"]}' -C myc

,还运行查询

peer chaincode query -n mycc -c '{"Args":["query","a"]}' -C myc

现在,我想看看钥匙值对如何存储在couchdb中。因此,我更改了下面的环境变量在织物示例/链码 - docker-devmode/docker-compose-simple.yaml

CORE_LEDGER_STATE_STATEDATABASE=CouchDB
CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS=couchdb0:5984

我在Couchdb UI( http://localhost:5984/myc/_all_docs )中看到了下面创建的文档。

{
  "total_rows": 3,
  "offset": 0,
  "rows": [{
      "id": "lsccu0000mycc",
      "key": "lsccu0000mycc",
      "value": {
        "rev": "1-dc6dc8ff92efd35358cf5b89e7949c25"
      }
    },
    {
      "id": "myccu0000a",
      "key": "myccu0000a",
      "value": {
        "rev": "3-7ad1349ec711a99a2a2f1dd1c8b08a20"
      }
    },
    {
      "id": "statedb_savepoint",
      "key": "statedb_savepoint",
      "value": {
        "rev": "6-2c3d131fc75772cc9e70311998bdde9d"
      }
    }
  ]
}

键存储和检索的值如何/在哪里?它被视为下面的,在DB中检查文档时,但是在运行链代码获取查询时可以正确检索。

"value": {
  "rev": "3-7ad1349ec711a99a2a2f1dd1c8b08a20"
}

虽然密钥持续到db中,但它以链码的名称为前缀,在您的示例中,它是 mycc,作为分隔符,使用的是[]byte{0x00}值。因此,您在示例中看到以下输出:

{
  "id": "myccu0000a",
  "key": "myccu0000a",
  "value": {
    "rev": "3-7ad1349ec711a99a2a2f1dd1c8b08a20"
  }
},

代表链代码mycc的密钥a。要获取此键的值,您可以简单地运行一个curl命令,例如添加查询参数attachements=true,例如:

curl -X GET "http://localhost:5984/mychannel/mycc%00a?attachments=true"

将产生与此类似的东西:

--bdb0a91d2e233fdc193f2359e6a50472
Content-Type: application/json
{"_id":"myccu0000a","_rev":"2-2af72e502c2b43c73064728852103fbf","chaincodeid":"mycc","version":"4:0","_attachments":{"valueBytes":{"content_type":"application/octet-stream","revpos":2,"digest":"md5-qpvq4/JGMCgu7WtvFu5zbg==","length":2,"follows":true,"encoding":"gzip","encoded_length":22}}}
--bdb0a91d2e233fdc193f2359e6a50472
Content-Disposition: attachment; filename="valueBytes"
Content-Type: application/octet-stream
Content-Length: 22
Content-Encoding: gzip
4鯄i
--bdb0a91d2e233fdc193f2359e6a50472--%

有关如何从Couchdb读取数据的更多信息,您可能会发现以下教程有用。

由于数据保存在二进制中,因此您找不到精确的值(相反,您会找到哈西),但会看到包含 mycc

最新更新