티스토리 뷰

반응형

해당 글은 Hyperledger Fabric 페이지의 게시글을 번역 및 정리한 자료입니다.

원본 사이트 : https://hyperledger-fabric.readthedocs.io/en/release-1.2/couchdb_tutorial.html


이 튜토리얼에서는 CouchDB를 Hyperledger Fabric이 있는 상태 데이터베이스로 사용하는 데 필요한 단계를 설명합니다. 지금까지 Fabric 개념을 잘 알고 있어야 하며 샘플 및 자습서 중 일부를 살펴 보았습니다.

이 자습서는 다음 단계를 안내합니다.

  1. Hyperledger 패브릭에서 CouchDB 사용
  2. index 만들기
  3. chaincode 폴더에 index 추가
  4. 체인 코드 설치 및 인스턴스화
  5. CouchDB 상태 데이터베이스 쿼리
  6. index 업데이트
  7. index 삭제

CouchDB에 대한 자세한 내용은 CouchDB를 상태 데이터베이스로 참조하고 원장 관리자에 대한 자세한 내용은 원장 주제를 참조하십시오. Blockchain 네트워크에서 CouchDB를 활용하는 방법에 대한 자세한 내용은 아래의 자습서를 따르십시오.

이 튜토리얼에서는 Marbles 샘플을 사용 사례로 사용하여 CouchDB를 Fabric과 함께 사용하는 방법을 시연하고 Marble을 Building Your First Network (BYFN) 자습서 네트워크에 배포합니다. 샘플, 바이너리 및 고정 이미지 설치 작업을 완료해야합니다. 그러나 BYFN 자습서를 실행하는 것은이 자습서의 전제 조건은 아니며 대신이 자습서에서 네트워크를 사용하는 데 필요한 명령이 제공됩니다.


Why CouchDB?

Fabric은 두 가지 유형의 피어 데이터베이스를 지원합니다. LevelDB는 피어 노드에 내장 된 기본 상태 데이터베이스이며 간단한 키 - 값 쌍으로 체인 코드 데이터를 저장하고 키, 키 범위 및 복합 키 쿼리 만 지원합니다. CouchDB는 chaincode 데이터 값을 JSON으로 모델링 할 때 다양한 쿼리를 지원하는 선택적 대체 상태 데이터베이스입니다. 리치 쿼리는 키가 아닌 실제 데이터 값의 내용을 쿼리 할 때보다 유연하고 효율적으로 대형 인덱스 데이터 저장소에 효율적입니다. CouchDB는 순수 키 - 값 저장소가 아닌 JSON 문서 데이터 저장소이므로 데이터베이스의 문서 내용에 대한 index 을 생성 할 수 있습니다.

콘텐츠 기반 JSON 쿼리와 같은 CouchDB의 이점을 활용하려면 데이터를 JSON 형식으로 모델링해야합니다. 네트워크를 설정하기 전에 LevelDB 또는 CouchDB를 사용할지를 결정해야합니다. 데이터 호환성 문제로 인해 피어를 LevelDB에서 CouchDB로 전환 할 수 없습니다. 네트워크의 모든 피어는 동일한 데이터베이스 유형을 사용해야합니다. JSON과 바이너리 데이터 값이 혼합되어있는 경우에도 CouchDB를 사용할 수 있지만 이진 값은 키, 키 범위 및 복합 키 쿼리를 기반으로 만 쿼리 할 수 있습니다.


Enable CouchDB in Hyperledger Fabric

CouchDB는 피어와 함께 별도의 데이터베이스 프로세스로 실행되므로 설정, 관리 및 작업과 관련하여 추가 고려 사항이 있습니다. CouchDB의 docker 이미지를 사용할 수 있으며 피어와 동일한 서버에서 실행하는 것이 좋습니다. 피어 당 하나의 CouchDB 컨테이너를 설정하고 core.yaml에 있는 구성을 CouchDB 컨테이너를 가리키도록 변경하여 각 피어 컨테이너를 업데이트해야 합니다. core.yaml 파일은 환경 변수 FABRIC_CFG_PATH에 지정된 디렉토리에 있어야합니다.

  • 도커 배포의 경우 core.yaml은 사전 구성되어 피어 컨테이너 FABRIC_CFG_PATH 폴더에 있습니다. 그러나 도커 환경을 사용할 때는 일반적으로 docker-compose-couch.yaml을 편집하여 core.yaml을 무시하고 환경 변수를 전달합니다
  • 원시 바이너리 배포의 경우 core.yaml이 릴리스 아티팩트 배포에 포함됩니다.

core.yaml의 stateDatabase 섹션을 편집하십시오. CouchDB를 stateDatabase로 지정하고 연관된 couchDBConfig 특성을 입력하십시오. CouchDB가 패브릭과 함께 작동하도록 구성하는 것에 대한 자세한 내용은 여기를 참조하십시오. CouchDB 용으로 구성된 core.yaml 파일의 예제를 보려면 HyperLedger/fabric-samples/first-network 디렉토리의 BYFN docker-compose-couch.yaml을 검토하십시오.


Create an index

인덱스가 중요한 이유는 무엇입니까?

인덱스를 사용하면 모든 쿼리가 있는 모든 행을 검사하지 않고도 데이터베이스를 쿼리 할 수 있으므로 더 빠르고 효율적으로 실행할 수 있습니다. 일반적으로 index 은 자주 발생하는 쿼리 기준에 맞게 작성되므로 데이터를보다 효율적으로 쿼리 할 수 있습니다. CouchDB의 주요 이점, 즉 JSON 데이터에 대해 풍부한 쿼리를 수행하는 기능을 활용하려면 인덱스가 필요하지 않지만 성능을 위해 강력히 권장됩니다. 또한 조회에서 정렬이 필요한 경우, CouchDB는 정렬 된 필드의 index 을 필요로합니다.

[노트]
인덱스가없는 리치 쿼리는 작동하지만 CouchDB 로그에 인덱스를 찾을 수 없다는 경고를 던질 수 있습니다. 그러나 서식있는 쿼리에 정렬 지정이 포함되어 있으면 해당 필드의 인덱스가 필요합니다. 그렇지 않으면 쿼리가 실패하고 오류가 발생합니다.

인덱스 구축을 시연하기 위해 Marbles 샘플의 데이터를 사용합니다. 이 예제에서 Marbles 데이터 구조는 다음과 같이 정의됩니다.

type marble struct {
         ObjectType string `json:"docType"` // docType은 상태 데이터베이스에서 다양한 유형의 객체를 구별하는 데 사용됩니다.
         Name       string `json:"name"`    // 필드 태그는 대 / 소문자가 튀는 것을 방지하기 위해 필요합니다.
         Color      string `json:"color"`
         Size       int    `json:"size"`
         Owner      string `json:"owner"`
}

이 구조에서 속성 (docType, name, color, size, owner)은 자산과 연결된 원장 데이터를 정의합니다. docType 속성은 체인 코드에서 별도로 쿼리해야 할 수도있는 여러 데이터 유형을 구분하는 데 사용되는 패턴입니다. CouchDB를 사용할 때이 docType 속성을 포함시켜 체인 코드 네임 스페이스에 있는 각 문서 유형을 구별하는 것이 좋습니다. 각 체인 코드는 자체 CouchDB 데이터베이스로 표현됩니다. 즉, 각 체인 코드에는 키에 대한 자체 네임 스페이스가 있습니다.

Marbles 데이터 구조와 관련하여 docType은이 documents/assets 이 marble 자산임을 식별하는 데 사용됩니다. 잠재적으로 다른 documents/assets 이 체인 코드 데이터베이스에 있을 수 있습니다.

데이터베이스의 문서 속성 값에 대해 검색 할 수 있습니다.

체인 코드 쿼리에 사용할 인덱스를 정의 할 때 각 인덱스는 확장자가 * .json 인 자체 텍스트 파일에 정의되어야하며 인덱스 정의는 CouchDB 인덱스 JSON 형식으로 형식화되어야합니다.

index를 정의하려면 세 가지 정보가 필요합니다.

- fields : 자주 조회되는 필드

- name : index 의 이름

- type : 이 컨텍스트에서 항상 json

예를 들어 foo라는 필드에 대해 foo-index라는 간단한 인덱스가 있습니다.

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

선택적으로, ddoc 디자인 문서 속성이 index 정의에 지정 될 수 있습니다. 설계 문서는 인덱스를 포함하도록 설계된 CouchDB 구조이다. 효율성을 위해 인덱스를 디자인 문서로 그룹화 할 수 있지만 CouchDB는 디자인 문서 당 하나의 인덱스를 권장합니다.

[팁]
인덱스를 정의 할 때 인덱스 이름과 함께 ddoc 속성 및 값을 포함시키는 것이 좋습니다. 필요한 경우 나중에 색인을 갱신 할 수 있도록이 속성을 포함시키는 것이 중요합니다. 또한 쿼리에 사용할 인덱스를 명시적으로 지정할 수있는 기능을 제공합니다.

다음은 여러 필드 ( docType  및 owner)를 사용하는 index 이름  indexOwner가 있는 Marbles 샘플의 index 정의의 또 다른 예이며  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가 이미 존재하지 않으면 인덱스가 배포 될 때 자동으로 만들어집니다. index 는 필드 목록에 지정된 하나 이상의 속성으로 구성 될 수 있으며 속성의 조합을 지정할 수 있습니다. 속성은 동일한 docType에 대한 여러 index 에 존재할 수 있습니다. 다음 예에서 index1은 특성 소유자 만 포함하고 index2는 특성 소유자와 색을 포함하며 index3은 특성 소유자, 색 및 크기를 포함합니다. 또한 CouchDB 권장 실습에 따라 각 index 정의에 자체 ddoc 값이 있음을 주목하십시오.

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

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

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

일반적으로 쿼리 필터 및 정렬에 사용될 필드와 일치하도록 인덱스 필드를 모델링해야합니다. JSON 형식으로 index 을 작성하는 방법에 대한 자세한 내용은 CouchDB 설명서를 참조하십시오.

Fabric은 index 작성에 대한 마지막 단어로서 index 가열이라는 패턴을 사용하여 데이터베이스의 문서를 index 처리합니다. CouchDB는 일반적으로 다음 쿼리 때까지 새 문서 또는 업데이트 된 문서를 인덱싱하지 않습니다. Fabric은 모든 데이터 블록이 커밋 된 후에 인덱스 업데이트를 요청하여 인덱스가 '웜'상태를 유지하도록합니다. 이렇게하면 쿼리를 실행하기 전에 문서를 인덱싱 할 필요가 없기 때문에 쿼리가 빠릅니다. 이 프로세스는 새 레코드가 상태 데이터베이스에 추가 될 때마다 인덱스를 최신 상태로 유지하고 새로 고칩니다.


Add the index to your chaincode folder

일단 index 을 완성하면 적절한 메타 데이터 폴더에 배치하여 배치 용 체인 코드와 함께 패키지 될 준비가됩니다.

체인 코드 설치 및 인스턴스화에서 Hyperledger Fabric Node SDK를 사용하는 경우 JSON 인덱스 파일은이 디렉토리 구조를 준수하는 한 모든 폴더에 위치 할 수 있습니다. client.installChaincode() API를 사용하여 체인 코드를 설치하는 동안 설치 요청에 특성 (metadataPath)을 포함시킵니다. metadataPath 값은 JSON index 파일을 포함하는 디렉토리 구조의 절대 경로를 나타내는 문자열입니다.

또는 피어 명령을 사용하여 체인 코드를 설치하고 인스턴스화하는 경우 JSON 인덱스 파일은 체인 코드가있는 디렉토리 내에있는 META-INF/statedb/couchdb/indexes 경로 아래에 있어야합니다.

아래의 Marbles 샘플은 피어 명령을 사용하여 설치되는 체인 코드와 함께 index 이 어떻게 포장되는지 보여줍니다.


Start the network

Try it yourself

구슬 체인 코드를 설치하고 인스턴스화하기 전에 BYFN 네트워크를 시작해야합니다. 이 자습서에서는 알려진 초기 상태에서 작동하려고합니다. 다음 명령은 활성 또는 비활성 docker 컨테이너를 제거하고 이전에 생성 된 아티팩트를 제거합니다. 따라서 다음 명령을 실행하여 이전 환경을 정리하십시오.

cd fabric-samples/first-network
./byfn.sh -m down

이제 다음 명령을 실행하여 CouchDB로 BYFN 네트워크를 시작하십시오.

./byfn.sh up -c mychannel -s couchdb

이렇게하면 두 개의 조직 (두 개의 피어 노드를 유지 관리하는)과 CouchDB를 상태 데이터베이스로 사용하는 주문 서비스로 구성된 mychannel이라는 단일 채널로 구성된 간단한 패브릭 네트워크가 생성됩니다.


Install and instantiate the Chaincode

클라이언트 애플리케이션은 체인 코드를 통해 블록 체인 원장과 상호 작용합니다. 따라서 트랜잭션을 실행하고 보증하고 채널에서 체인 코드를 인스턴스화하는 모든 피어에 체인 코드를 설치해야합니다. 이전 섹션에서는 배포 할 준비가 될 수 있도록 체인 코드를 패키지하는 방법을 설명했습니다.

체인 코드는 피어에 설치되고 피어 명령을 사용하여 채널에 인스턴스화됩니다.

1. 피어 체인 코드 설치 명령을 사용하여 피어에 Marbles 체인 코드를 설치하십시오.

Try it yourself

BYFN 네트워크를 시작했다고 가정하면 다음 명령을 사용하여 CLI 컨테이너로 이동하십시오.

docker exec -it cli bash

다음 명령을 사용하여 git 저장소에서 BYFN 네트워크의 피어로 Marbles 체인 코드를 설치하십시오. CLI 컨테이너는 기본적으로 org1의 peer0을 사용합니다.

peer chaincode install -n marbles -v 1.0 -p github.com/chaincode/marbles02/go

2. 피어 체인 코드 instantiate 명령을 실행하여 채널에서 체인 코드를 인스턴스화합니다.

Try it yourself

BYFN 채널 mychannel에서 Marbles 샘플을 인스턴스화하려면 다음 명령을 실행합니다.

export CHANNEL_NAME=mychannel
peer chaincode instantiate -o orderer.example.com:7050 --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C $CHANNEL_NAME -n marbles -v 1.0 -c '{"Args":["init"]}' -P "OR ('Org0MSP.peer','Org1MSP.peer')"


Verify index was deployed

체인 코드가 피어에 설치되고 채널에 인스턴스화되면 인덱스가 각 피어의 CouchDB 상태 데이터베이스에 배포됩니다. Docker 컨테이너에서 피어 로그를 검사하여 CouchDB 인덱스가 성공적으로 생성되었는지 확인할 수 있습니다.

Try it yourself

피어 도커 컨테이너의 로그를 보려면 새 터미널 창을 열고 다음 명령을 실행하여 grep을 실행하여 인덱스가 작성되었음을 확인하는 메시지를 확인하십시오.

docker logs peer0.org1.example.com  2>&1 | grep "CouchDB index"

다음과 같은 결과가 나타납니다.

[couchdb] CreateIndex -> INFO 0be Created CouchDB index [indexOwner] in state database [mychannel_marbles] using design document [_design/indexOwnerDoc]
[노트]
Marbles가 BYFN 피어 peer0.org1.example.com에 설치되어 있지 않으면 Marbles가 설치된 다른 피어의 이름으로 바꿔야 할 수 있습니다.


Query the CouchDB State Database

이제 인덱스가 JSON 파일에 정의되고 체인 코드와 함께 배치되었으므로 chaincode 함수는 CouchDB 상태 데이터베이스에 대한 JSON 쿼리를 실행할 수 있으므로 피어 명령이 chaincode 함수를 호출 할 수 있습니다.

조회에 index 이름을 지정하는 것은 선택 사항입니다. 지정되지 않은 경우 쿼리중인 필드에 대한 인덱스가 이미 존재하면 기존 인덱스가 자동으로 사용됩니다.

[팁]
use_index 키워드를 사용하여 쿼리에 인덱스 이름을 명시 적으로 포함하는 것이 좋습니다. CouchDB가 없으면 CouchDB는 덜 최적 인 색인을 선택할 수 있습니다. 또한 CouchDB는 인덱스를 전혀 사용하지 않을 수 있으며 테스트 중에 낮은 볼륨에서이를 인식하지 못할 수도 있습니다. CouchDB가 색인을 사용하고 있지 않다고 가정하고 더 높은 볼륨에서만 성능 저하를 느낄 수 있습니다.


Build the query in chaincode

체인 코드 내에서 CouchDB JSON 쿼리 언어를 사용하여 체인 코드 데이터 값에 대해 복잡한 리치 쿼리를 수행 할 수 있습니다. 위에서 살펴본 바와 같이 marbles02 샘플 체인 코드에는 인덱스가 포함되어 있으며 풍부한 쿼리는 queryMarbles 및 queryMarblesByOwner 함수에 정의되어 있습니다.

  • queryMarbles –

임시 임의 조회의 예. 이 함수는 (selector) 문자열을 함수로 전달할 수있는 쿼리입니다. 이 쿼리는 런타임에 자체 selector 를 동적으로 작성해야하는 클라이언트 응용 프로그램에 유용합니다. selector 에 대한 자세한 정보는 CouchDB selector 문법을 참조하십시오.

  • queryMarblesByOwner –

쿼리 로직이 체인 코드로 구워진 매개 변수화 된 쿼리의 예입니다. 이 경우 함수는 단일 인수인 marble 소유자를받습니다. 그런 다음 상태 데이터베이스에서 "marble"의 docType과 JSON 쿼리 구문을 사용하여 소유자 ID와 일치하는 JSON 문서를 쿼리합니다.


Run the query using the peer command

체인 코드에 정의 된 리치 쿼리를 테스트하는 클라이언트 응용 프로그램이 없으면 피어 명령을 사용할 수 있습니다. 피어 명령은 도커 컨테이너 내부의 명령 줄에서 실행됩니다. Marbles 인덱스 indexOwner 를 사용하고  queryMarbles함수를 사용하여 "tom"이 소유 한 모든 대리석을 쿼리하도록 피어 체인 코드 쿼리 명령을 사용자 정의합니다.

Try it yourself

데이터베이스를 쿼리하기 전에 일부 데이터를 추가해야합니다. 피어 컨테이너에서 다음 명령을 실행하여 "tom"이 소유한 marble 을 만듭니다.

peer chaincode invoke -o orderer.example.com:7050 --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C $CHANNEL_NAME -n marbles -c '{"Args":["initMarble","marble1","blue","35","tom"]}'

체인 코드 인스턴스화 중에 인덱스가 배치되면 체인 코드 쿼리에 의해 인덱스가 자동으로 활용됩니다. CouchDB는 쿼리되는 필드에 따라 사용할 인덱스를 결정할 수 있습니다. 조회 기준에 대한 index 가 있으면 사용됩니다. 그러나 권장되는 접근 방식은 쿼리에 use_index 키워드를 지정하는 것입니다. 아래의 peer 명령은 use_index 키워드를 포함시켜 선택기 구문에 명시 적으로 인덱스를 지정하는 방법의 예입니다.

// Rich Query with index name explicitly specified:
peer chaincode query -C $CHANNEL_NAME -n marbles -c '{"Args":["queryMarbles", "{\"selector\":{\"docType\":\"marble\",\"owner\":\"tom\"}, \"use_index\":[\"_design/indexOwnerDoc\", \"indexOwner\"]}"]}'

위 쿼리 명령을 살펴보면 다음과 같은 세 가지 인수가 있습니다.

  • queryMarbles
  • queryMarbles 는 marble 체인 코드의 함수 이름입니다. shim 'shim.ChaincodeStubInterface'는 원장에 액세스하고 수정하는 데 사용됩니다. 'getQueryResultForQueryString()'은 queryString을 shim API 'getQueryResult()'에 전달합니다.
func (t *SimpleChaincode) queryMarbles(stub shim.ChaincodeStubInterface, args []string) pb.Response {

        //   0
        // "queryString"
         if len(args) < 1 {
                 return shim.Error("Incorrect number of arguments. Expecting 1")
         }

         queryString := args[0]

         queryResults, err := getQueryResultForQueryString(stub, queryString)
         if err != nil {
               return shim.Error(err.Error())
         }
         return shim.Success(queryResults)
}
  • {"selector":{"docType":"marble","owner":"tom"}
  • 다음은 owner 속성의 값이 tommarble  유형의 모든 문서를 찾는 임시 selector 문자열의 예입니다.
  • "use_index":["_design/indexOwnerDoc", "indexOwner"]
  • 디자인 문서 이름  indexOwnerDoc과 인덱스 이름 indexOwner를 모두 지정합니다. 이 예에서 선택기 쿼리는 명시 적으로  use_index키워드를 사용하여 지정된 인덱스 이름을 포함합니다. CreateAnIndex 위의 인덱스 정의를 상기하면 디자인 문서"ddoc":"indexOwnerDoc"가 포함됩니다. CouchDB에서 명시 적으로 인덱스 이름을 쿼리에 포함하려면 인덱스 정의에 ddoc 값을 포함시켜야하므로  use_index키워드로 참조 할 수 있습니다.

쿼리가 성공적으로 실행되고 인덱스는 다음 결과와 함께 활용됩니다.

Query Result: [{"Key":"marble1", "Record":{"color":"blue","docType":"marble","name":"marble1","owner":"tom","size":35}}]


Update an Index

시간이 지남에 따라 index 을 갱신해야 할 수도 있습니다. 동일한 index 가 설치되는 체인 코드의 후속 버전에도 존재할 수 있습니다. index 을 갱신하려면 원래 index 정의에 설계 문서 ddoc 속성과 index 이름이 있어야합니다. index 정의를 갱신하려면 동일한 index 이름을 사용하되 index 정의를 변경하십시오. index JSON 파일을 편집하고 index 에서 필드를 추가하거나 제거하기 만하면됩니다. 패브릭은 index 유형 JSON 만 지원하며 index 유형은 변경할 수 없습니다. 체인 코드가 설치되어 인스턴스화되면 업데이트 된 index 정의가 피어의 상태 데이터베이스에 다시 배포됩니다. index 이름 또는 ddoc 속성을 변경하면 새로운 index 이 작성되고 원래의 index 은 제거 될 때까지 CouchDB에서 변경되지 않습니다.

[노트]
상태 데이터베이스에 상당한 양의 데이터가있는 경우 인덱스를 다시 빌드하는 데 약간의 시간이 걸리며이 시간 체인 코드는 해당 쿼리를 호출하여 쿼리가 실패하거나 시간 초과 될 수 있습니다


Iterating on your index definition

개발 환경에서 peer 의 CouchDB 상태 데이터베이스에 액세스 할 수 있다면 체인 코드 쿼리를 지원하는 다양한 인덱스를 반복적으로 테스트 할 수 있습니다. 체인 코드를 변경하면 재배포가 필요합니다. CouchDB Fauxton 인터페이스 또는 명령 행 curl 유틸리티를 사용하여 index 을 작성하고 갱신하십시오.

[노트]
Fauxton 인터페이스는 CouchDB에 인덱스를 생성, 업데이트 및 배포하기위한 웹 UI입니다. 이 인터페이스를 시험해보고 싶다면 Marbles 샘플의 Fauxton 버전 index 의 형식 예가 있습니다. CouchDB에 BYFN 네트워크를 배치 한 경우 브라우저를 열고 http://localhost:5984/_utils로 이동하여 Fauxton 인터페이스를 로드 할 수 있습니다.

또는 Fauxton UI를 사용하지 않으려는 경우 다음은 데이터베이스 mychannel_marbles에 index 를 만드는 데 사용할 수 있는 curl 명령의 예입니다.

// docType, owner에 대한 index 입니다.

// CouchDB channel_chaincode 데이터베이스에서 인덱스를 정의하는 curl 명령 행 예제

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
[노트]
CouchDB로 구성된 BYFN을 사용하는 경우 hostname:port를 localhost:5984로 바꿉니다.


Delete an Index

index 삭제는 패브릭 도구로 관리하지 않습니다. index 을 삭제해야하는 경우 데이터베이스에 대해 curl 명령을 수동으로 실행하거나 Fauxton 인터페이스를 사용하여 삭제하십시오.

index 를 삭제하는 curl 명령의 형식은 다음과 같습니다.

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

이 자습서에서 사용 된 index 을 삭제하려면 curl 명령은 다음과 같습니다.

반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함