निम्नलिखित ट्यूटोरियल श्रृंखला में तीन लेख शामिल हैं जो आपको CRUD संचालन, डेटा संरक्षण और चैंकोड परीक्षण से लेकर हाइपरलेडेर फैब्रिक चैंकोड विकास के बारे में विभिन्न पहलुओं को सिखाएंगे।.

भाग 1

भाग 2

भाग ३

हाइपरलेगर फैब्रिक ट्यूटोरियल: व्यापक गाइड- भाग 2

श्रृंखला का अवलोकन:

  • अनुच्छेद 1: मूल चैंकोड विकास और संग्रह में निजी डेटा संग्रहीत करना
  • अनुच्छेद 2: उन्नत चिनकोड प्रश्न और काउचबीडी जीयूआई
  • अनुच्छेद 3: मॉकस्टब के साथ अपने चैंकोड का परीक्षण करने के लिए एक ट्यूटोरियल

आवश्यकताओं को

  • 4GB RAM (अधिक पसंद की जाती है)
  • डॉकर, डॉकर-कम्पोज़, कोड एडिटर (जैसे विज़ुअल स्टूडियो कोड), गिट
  • NodeJS संस्करण 8.9+ (पसंदीदा 8.9.4 है – टिप: a जैसे संस्करण प्रबंधक के साथ अपना संस्करण बदलेंएन‘)
  • बेसिक जावास्क्रिप्ट ज्ञान

उद्देश्यों

  • CouchDB और इसकी क्वेरी भाषा के बारे में जानें
  • मैंगो क्वेरी भाषा सीखें.
  • उन्नत चिनकोड प्रश्न बनाएं, उन्हें CouchDB GUI के माध्यम से परीक्षण करें और उन्हें अपने चिनकोड में लागू करें.

परिचय

पहले लेख में, हमने बेसिक चैंकोड कार्यों को बनाना सीखा जो थेलर द्वारा उपलब्ध कराए गए ओपन सोर्स बायलरप्लेट का उपयोग करके लेजर पर CRUD ऑपरेशन करने में सक्षम हैं।.

इस दूसरे ट्यूटोरियल में, हम उन्नत चिनकोड प्रश्नों को बनाने पर ध्यान केंद्रित करेंगे, जिन्हें समृद्ध प्रश्नों के रूप में भी जाना जाता है, जो हमें एक विशेष कुंजी की तलाश करने के बजाय अधिक जटिल प्रश्न बनाने में सक्षम बनाता है।.

शुरू हो जाओ 

सुनिश्चित करें कि आपके पास उस कोड की एक प्रति है, जिस पर पाया जा सकता है गितुब मिचिएल्मुलर्स / हाइपरलेगर-फैब्रिक-ब्लॉकेज. यह उपयोग करने के लिए अनुशंसित है गिट क्लोन https://github.com/michielmulders/hyperledger-fabric-blockgeeks.git अपनी मशीन पर रिपॉजिटरी का एक स्थानीय क्लोन बनाने और ट्यूटोरियल के दूसरे भाग को चेकआउट करने के लिए जीआईटी चेकआउट ट्यूटोरियल -2

अगला, के साथ नेटवर्क शुरू करें ./scripts/startFabric.sh , यदि आप इस ट्यूटोरियल के लिए नए हैं, तो उठने और चलने के लिए पहले लेख में plate बॉयलरप्लेट सेटअप ’अनुभाग को देखना सुनिश्चित करें।.

एक बार जब आपका हाइपरलेगर फैब्रिक नेटवर्क शुरू हो गया, इस लिंक को खोलें (http: // localhost: 5984 / _utils / # / _ all_dbs) अपने ब्राउज़र में जो CouchDB GUI प्रदर्शित करना चाहिए.

काउचडीबी के बारे में

वास्तव में, हाइपरलेडर फैब्रिक प्रत्येक वस्तु की नवीनतम स्थिति को पकड़े हुए, स्टेट डेटाबेस के रूप में सेवा करने के लिए काउचबीडी के रूप में दोनों ही लेवलबैंक का समर्थन करता है। LevelDB डिफ़ॉल्ट कुंजी-मूल्य राज्य डेटाबेस हर सहकर्मी में एम्बेडेड है। CouchDB एक वैकल्पिक वैकल्पिक बाहरी राज्य डेटाबेस है। LevelDB कुंजी-मूल्य स्टोर की तरह, CouchDB किसी भी बाइनरी डेटा को स्टोर कर सकता है जो कि चिनकोड में मॉडलिंग की जाती है। हालाँकि, CouchDB एक बेहतर विकल्प है क्योंकि यह JSON डॉक्यूमेंट स्टोरेज को सपोर्ट करता है जो कि चैंकोड डेटा के खिलाफ रिच क्वेश्चन को सक्षम बनाता है जबकि LevelDB केवल कीज़ के खिलाफ सपोर्ट करता है.

Hyperledger Fabric प्रलेखन के अनुसार,

सहकर्मी सहकर्मी के साथ एक अलग डेटाबेस प्रक्रिया के रूप में चलता है, इसलिए सेटअप, प्रबंधन, संचालन और विशेष रूप से सुरक्षा के संदर्भ में अतिरिक्त विचार हैं।.”

इसलिए, LevelDB कम कार्यक्षमता प्रदान करता है, हालांकि, यह ठीक से कॉन्फ़िगर किया गया है जबकि CouchDB को कुछ अतिरिक्त कॉन्फ़िगरेशन की आवश्यकता होती है जैसे डेटाबेस व्यवस्थापक उपयोगकर्ता और पासवर्ड प्रदान करना या सहकर्मी के लिए CouchDB पता प्रदान करना, यह जानने के लिए कि इसकी वर्तमान स्थिति कहाँ देखना है।.

जिस बॉयलरप्लेट का हम उपयोग कर रहे हैं, उसमें CouchDB शामिल कॉन्फ़िगरेशन है। आइए हमारी पहली समृद्ध क्वेरी बनाएं.

काउचबडी जीयूआई

जब आपने GUI खोला है तो आप पा सकते हैं http: // localhost: 5984 / _utils / # / _ all_dbs, आपको निम्नलिखित इंटरफ़ेस देखना चाहिए.

हाइपरलेगर फैब्रिक ट्यूटोरियल: व्यापक गाइड- भाग 2

खुलने दो mychannel_fabcar (चैनल नाम चेंकोड नाम के साथ संयुक्त) डेटाबेस और इसके अंदर कार वस्तुओं का पता लगाएं.

हाइपरलेगर फैब्रिक ट्यूटोरियल: व्यापक गाइड- भाग 2

अगला, हमारी पहली क्वेरी को निष्पादित करने के लिए open Run a Query with Mango ’लिंक खोलें। सभी कार वस्तुओं को खोजने के लिए एक साधारण प्रश्न के साथ शुरू करते हैं। हम इसे docType T कार ’की तलाश में पूरा कर सकते हैं.

हाइपरलेगर फैब्रिक ट्यूटोरियल: व्यापक गाइड- भाग 2

मैंगो क्वेरी ऑपरेटर

1. फील्ड्स ऑपरेटर

The फ़ील्ड्स का ऑपरेटर आपको केवल विशिष्ट फ़ील्ड वापस करने की अनुमति देता है। चलो पिछले उदाहरण से क्वेरी लेते हैं और केवल प्रत्येक कार ऑब्जेक्ट का रंग वापस करते हैं.

{{

  "चयनकर्ता": {

     "docType": "गाड़ी"

  },

  "खेत": [

     "रंग"

  ]

}

2. ऑपरेटर में

ऑपरेटर में $ आपको एक क्षेत्र के भीतर विशिष्ट मूल्यों की खोज करने की अनुमति देता है। यह आपको उन संभावित मानों के एक समूह को पारित करने में सक्षम बनाता है जिन्हें आप मेल खाना चाहते हैं। चलो पिछली क्वेरी लेते हैं और केवल बैंगनी और बैंगनी कारों को वापस करते हैं.

{{

  "चयनकर्ता": {

     "docType": "गाड़ी",

     "रंग": {

        "$ में": [

           "बैंगनी",

           "नील लोहित रंग का"

        ]

     }

  },

  "खेत": [

     "रंग"

  ]

}

क्वेरी तीन कार ऑब्जेक्ट, एक रंग will पर्पल ’और दो कलर return वायलेट’ लौटाएगी.

हाइपरलेगर फैब्रिक ट्यूटोरियल: व्यापक गाइड- भाग 2

3. लिमिट और स्किप ऑपरेटर

ठीक है, उदाहरण के लिए हम पहले परिणाम को छोड़ना चाहते हैं और परिणाम को दो कारों तक सीमित करना चाहते हैं, इसलिए हमारे पास पिछले उदाहरण की केवल दो वायलेट कारें हैं। सीमा ऑपरेटर आपको लौटी हुई वस्तुओं की मात्रा को सीमित करने देता है जबकि स्किप ऑपरेटर चयनकर्ता कर्सर को ले जाने में सक्षम है.

<div style ="पृष्ठभूमि: #ffffff; ओवरफ़्लो: ऑटो; चौड़ाई: ऑटो; बॉर्डर: सॉलिड ग्रे; बॉर्डर-चौड़ाई:। 1em .1em .1em .8em; पैडिंग: .2em .6em"><पूर्व शैली ="मार्जिन: 0; लाइन-ऊंचाई: 125%">{{

<स्पैन शैली ="रंग: # FF0000; बैकग्राउंड रंग: #FFAAAA">  अवधि><स्पैन शैली ="पृष्ठभूमि-रंग: # fff0f0">&quot; चयनकर्ता&उद्धरण; अवधि>: {

<स्पैन शैली ="रंग: # FF0000; बैकग्राउंड रंग: #FFAAAA">     अवधि><स्पैन शैली ="पृष्ठभूमि-रंग: # fff0f0">&उद्धरण;&उद्धरण; अवधि>: <स्पैन शैली ="पृष्ठभूमि-रंग: # fff0f0">&उद्धरण; कार&उद्धरण; अवधि>,

<स्पैन शैली ="रंग: # FF0000; बैकग्राउंड रंग: #FFAAAA">     अवधि><स्पैन शैली ="पृष्ठभूमि-रंग: # fff0f0">&रंग;&उद्धरण; अवधि>: {

<स्पैन शैली ="रंग: # FF0000; बैकग्राउंड रंग: #FFAAAA">        अवधि><स्पैन शैली ="पृष्ठभूमि-रंग: # fff0f0">&$, में $&उद्धरण; अवधि>: [

<स्पैन शैली ="रंग: # FF0000; बैकग्राउंड रंग: #FFAAAA">           अवधि><स्पैन शैली ="पृष्ठभूमि-रंग: # fff0f0">&वायलेट&उद्धरण; अवधि>,

<स्पैन शैली ="रंग: # FF0000; बैकग्राउंड रंग: #FFAAAA">           अवधि><स्पैन शैली ="पृष्ठभूमि-रंग: # fff0f0">&बैंगनी&उद्धरण; अवधि>

<स्पैन शैली ="रंग: # FF0000; बैकग्राउंड रंग: #FFAAAA">        अवधि>]

<स्पैन शैली ="रंग: # FF0000; बैकग्राउंड रंग: #FFAAAA">     अवधि>}

<स्पैन शैली ="रंग: # FF0000; बैकग्राउंड रंग: #FFAAAA">  अवधि>},

<स्पैन शैली ="रंग: # FF0000; बैकग्राउंड रंग: #FFAAAA">  अवधि><स्पैन शैली ="पृष्ठभूमि-रंग: # fff0f0">&quot; क्षेत्र&उद्धरण; अवधि>: [

<स्पैन शैली ="रंग: # FF0000; बैकग्राउंड रंग: #FFAAAA">     अवधि><स्पैन शैली ="पृष्ठभूमि-रंग: # fff0f0">&रंग;&उद्धरण; अवधि>

<स्पैन शैली ="रंग: # FF0000; बैकग्राउंड रंग: #FFAAAA">  अवधि>],

<स्पैन शैली ="रंग: # FF0000; बैकग्राउंड रंग: #FFAAAA">  अवधि><स्पैन शैली ="पृष्ठभूमि-रंग: # fff0f0">&quot; सीमा&उद्धरण; अवधि>: <स्पैन शैली ="रंग: # 0000DD; फोंट की मोटाई: बोल्ड">2span>,

<स्पैन शैली ="रंग: # FF0000; बैकग्राउंड रंग: #FFAAAA">  अवधि><स्पैन शैली ="पृष्ठभूमि-रंग: # fff0f0">&उद्धरण; छोड़ें&उद्धरण; अवधि>: <स्पैन शैली ="रंग: # 0000DD; फोंट की मोटाई: बोल्ड">1span>

}

पूर्व>डिव>

4. रेगेक्स ऑपरेटर

जैसा कि शीर्षक से पता चलता है, मैंगो क्वेरी के रूप में रेगेक्स को पारित करना संभव है। छोटे साइड नोट, जटिल रेगेक्स एक्सप्रेशंस (जैसे नेस्टेड एक्सप्रेशन) पास करने की अनुशंसा नहीं की गई क्योंकि उन्हें बहुत अधिक कंप्यूटिंग शक्ति की आवश्यकता होती है.

इस उदाहरण के लिए, हम केवल उन कार मॉडलों से मेल खाना चाहते हैं जिनमें कम से कम एक अक्षर हो। इस परिणाम से CAR5 को समाप्त कर देना चाहिए क्योंकि मॉडल ‘205’ है। चलो एक नज़र मारें.

{{

  "चयनकर्ता": {

     "नमूना": {

        "$ रेगेक्स": "[ए-जेड]+"

     }

  }

}

5. क्वेरी सबडामेंसेस

सबडैक्शंस के लिए क्वेरी करना भी संभव है। एक संशोधित कार ऑब्जेक्ट की कल्पना करें जहां मालिक फ़ील्ड में एक ऑब्जेक्ट होता है जिसमें उपयोगकर्ता गुण होते हैं.

{{

  “नमूना”,

  “DocType”,

  …,

“मालिक”: {

      “नाम”,

      “आयु”,

      “पता”

  }

}

नीचे दिखाए गए अनुसार उप-कामों के संबंध में मैंगो बहुत लचीला है – यह क्वेरी उन उपयोगकर्ताओं के लिए दिखती है जो 18 वर्ष के हैं.

{{

   "चयनकर्ता": {

       "मालिक": 18

   }

}

6. अन्य ऑपरेटर

कई अन्य ऑपरेटर मौजूद हैं:

  • “$ Gt”: फ़ील्ड का मूल्य X से अधिक होना चाहिए.
  • “$ Lt”: फ़ील्ड का मूल्य X से कम होना चाहिए.
  • “$ Eq”: फ़ील्ड का मूल्य X के बराबर होना चाहिए.
  • “$ या”: मान खोज मानों की श्रेणी में होना चाहिए.
  • “$ नहीं”: फ़ील्ड मूल्य X से मेल नहीं खा सकती है.

क्वेरी ऑपरेटरों का पूर्ण कार्यान्वयन पाया जा सकता है यहां.

चिनकोड रिच क्वेरीज़

अब, हमने और अधिक उन्नत प्रश्न लिखना सीख लिया है, आइए डेटा को पुनः प्राप्त करने के लिए इस नए ज्ञान का उपयोग अपने चाईकोड में करें। हम इसका उपयोग करेंगे getQueryResultAsList stubHelper से कार्य करता है जो एक चयनकर्ता को स्वीकार करता है और आवश्यक डेटा लौटाता है.

फिर से, एक समृद्ध क्वेरी का उपयोग करके हमारे डेटाबेस में सभी कार ऑब्जेक्ट के लिए क्वेरी करें। GetQueryResultAsList फ़ंक्शन क्वेरी में किसी ऑब्जेक्ट को स्वीकार करता है.

async queryAllCars (stubHelper: StubHelper, args: string []): वादा<कोई> {{

       वापसी का इंतजार stubHelper.getQueryResultAsList ({

           चयनकर्ता: {

               docType: ‘कार’

           }

       };

}

नेटवर्क का उपयोग करके पुनः आरंभ करें ./scripts/startFabric.sh और चलाने वाले को निष्पादित करने वाले कमांड को निष्पादित करें क्वेरीऑलर्स हमारे चैनकोड में कार्य करते हैं.

docker execi cli peer chaincode query -C mychannel -n fabcar -c ‘{” function “:” queryAllCars “,” Args “: [” “]} ‘

डॉकर हमें कार वस्तुओं से भरा एक सरणी लौटाएगा। जैसा कि आप देख सकते हैं, यह मुश्किल नहीं है कि चिनकोड में समृद्ध प्रश्न बनाने के लिए.

हमने क्या सीखा??

मैंगो क्वेरी भाषा कई क्वेरी ऑपरेटरों को प्रदान करती है जिनका उपयोग हम अपने ब्लॉकचेन नेटवर्क में डेटा खोजने के लिए अधिक जटिल प्रश्न बनाने के लिए कर सकते हैं। डेटा के लिए फ़िल्टर करने के लिए रेगेक्स का उपयोग करना संभव है, हालांकि, प्रदर्शन कारणों के कारण उपयोग को केवल मूल रेगेक्स प्रश्नों तक सीमित रखा गया है। इसके अलावा, इन समृद्ध प्रश्नों को चिनकोड में लागू करना मुश्किल नहीं है क्योंकि स्टुबलर पूरी मेहनत करता है.

कोड धोखा देती है

  1. मैंगो क्वेरी एक चयनकर्ता से शुरू होती है जो एक फ़ील्ड (टों) को लक्षित करता है, जिस पर हम एक या अधिक ऑपरेटर कहते हैं.

चयनकर्ता: {

     मैदान: {

         “$ ऑपरेटर”: …

     }

}

  1. stubHelper.getQueryResultAsList फ़ंक्शन क्वेरी को हमारे हाइपरलेगर फैब्रिक नेटवर्क पर भेजता है और परिणाम सरणी देता है.

आगे पढ़ता है

द्वारा मिशैल मुलर्स

@michiel_mulders

Mike Owergreen Administrator
Sorry! The Author has not filled his profile.
follow me