त्याग
यह लेख आपको अपने पिछले सभी अनुभव और अपने स्वयं के प्रोजेक्ट को विकसित करते समय आपके द्वारा प्राप्त किए गए शॉल्स के संबंध में, काउचबेस का उपयोग करने के लिए उपयोग किए जाने वाले सभी चीज़ों को छोड़ने और स्विच करने का आग्रह नहीं करता है। यह लेख केवल PHP और अधिक के साथ संयोजन में Couchbase सर्वर का उपयोग करने की तकनीक का एक संक्षिप्त विवरण होने का इरादा है। शायद यह संभावनाओं के विवरण के रूप में कुछ के लिए दिलचस्प होगा, और शायद संभावनाओं पर एक मूल्यांकनत्मक दृष्टिकोण के रूप में भी।
यह क्या है और इसके साथ क्या खाती है
Couchbase, Couchbase, Inc द्वारा विकसित NoSQL डेटाबेस का एक अन्य क्षेत्र है और अपने माता-पिता, CouchDB की परंपराओं और समस्याओं का प्रत्यक्ष वंशज है। यह एक दस्तावेज-उन्मुख डेटाबेस है, जो प्रत्येक व्यक्ति के रिकॉर्ड को एक दस्तावेज के रूप में संग्रहीत करता है, हालांकि यह एक सख्त नियम नहीं है, और किसी भी मूल्य (BLOB लाइनों तक) एक रिकॉर्ड के रूप में कार्य कर सकता है, लेकिन इस (और अन्य डेटाबेस भी) का आकर्षण है दस्तावेज़-आधारित डेटा संग्रहण विधि।
दस्तावेज़-आधारित डेटा संग्रहण विधि का अर्थ है कि सभी डेटा तथाकथित दस्तावेज़ों के रूप में संग्रहीत किए जाएंगे, अर्थात्। सामान्य ज्ञान और रिकॉर्ड में मौजूद सामान्य तर्क के सिद्धांतों पर एक दस्तावेज़ में संयुक्त क्षेत्रों के सेट। इस तरह के रिकॉर्ड का एक उदाहरण एक उपयोगकर्ता प्रोफ़ाइल हो सकता है, उदाहरण के लिए, खेतों की एक सूची के साथ: लॉगिन, पासवर्ड, ईमेल और अन्य। इस स्थिति में, दस्तावेज़ संग्रहण मानक JSON स्ट्रिंग के रूप में दस्तावेज़ स्वरूप है। यह प्रारूप जानबूझकर रचनाकारों द्वारा चुना गया था, क्योंकि यह काफी लोकप्रिय है, आसानी से व्याख्या की जाती है, और मानव-पठनीय है। लेकिन बात नहीं। यह महत्वपूर्ण है कि आपको इस बात का अंदाजा हो कि एक दस्तावेज क्या है और यह डेटाबेस के अंदर कैसा दिखता है।
काम के लिए आवश्यक घटक
PHP का उपयोग करके काउचबेस के साथ काम करने के लिए, हमें सॉफ्टवेयर के कुछ बिंदुओं की आवश्यकता है:
इस सभी सामान को सफलतापूर्वक स्थापित करने और सफलतापूर्वक लॉन्च करने के बाद, हमारे पास काउचबेस नामक एक वर्ग का उपयोग करने का अवसर है, जिसका विवरण काउचबेस के
आधिकारिक गिट भंडार में है । आगे उपयोग की सुविधा के लिए, मैं आपको इसे अपने प्रोजेक्ट में जोड़ने की सलाह देता हूं ताकि आपका पसंदीदा आईडी सफलतापूर्वक ऑटो-सेट कमा सके।
इसके अलावा, सुविधाजनक संचालन के लिए, आपको स्वयं काउचबेस में एक अलग बकेट (डेटाबेस का एनालॉग) बनाने की आवश्यकता होगी, जिसके लिए आपको सामान्य और मानक डिफ़ॉल्ट को खराब नहीं करना होगा। यह
लोकलहोस्ट एड्रेस: 8091 / index.html # sec = बकेट पर जाकर और "Create new bucket" बटन पर क्लिक करके किया जाता है।
कोडिंग शुरू करें
कुछ अमूर्त कोडिंग का कोई मतलब नहीं होता है, इसलिए आइए, उपयोगकर्ता प्रोफ़ाइल के ऊपर एक बहुत विशिष्ट उदाहरण लेते हैं। मान लें कि हमारे उपयोगकर्ता के पास कई फ़ील्ड हैं: लॉगिन, पासवर्ड, ईमेल, अच्छी तरह से, अंतर्निहित से - यह प्रकार पूर्णांक का अपना पहचानकर्ता है। JSON प्रतिनिधित्व में, परिणामी दस्तावेज़ इस तरह दिखेगा:
{ "login": "megausername", "password": "my secured password!", "email": "email@example.com" }
सबसे पहले, हमें यह पता लगाने की आवश्यकता है कि इस व्यवसाय को डेटाबेस में कैसे संग्रहीत किया जा सकता है और इसे वहां से कैसे निकाला जाए। यह काफी सरलता से किया जाता है, और निम्नलिखित उदाहरण में स्पष्ट रूप से दिखाई देता है:
<?php $couchbase = new Couchbase(array('localhost'), 'couchbase_user', 'couchbase_password', 'users_bucket', TRUE); $document = array( 'login' => 'megausername', 'password' => 'my secured password!', 'email' => 'email@example.com' ); $userId = $couchbase->increment('counter::users', 1, TRUE); try { $couchbase->add("profile::{$userId}", json_encode($document)); } catch(\CouchbaseException $e)
जैसा कि आप देख सकते हैं, उपरोक्त उदाहरण में, उपयोगकर्ता आईडी बनाने के अलावा, बिल्कुल कोई कठिनाई नहीं है। जब आपको खोज शुरू करने की आवश्यकता होगी, उसके तुरंत बाद कठिनाइयाँ शुरू हो जाएंगी।
देखें और इसके साथ कैसे काम करना है
यदि आप काउचबेस सर्वर कंट्रोल पैनल पर जाते हैं, तो आपको एक अद्भुत चीज़ दिखाई देगी, जिसे व्यू कहा जाता है। इसमें दो उप-आइटम "विकास के विचार" और "उत्पादन के विचार" होंगे। प्रदर्शन का अनुमान लगाना मुश्किल नहीं है (और काउचबेस के संदर्भ में यह एक चयन है)। जबकि वहाँ खाली है, लेकिन हम यह पता लगाएंगे कि वहां कैसे खराब किया जाए।
देखें अनिवार्य रूप से एक सूचकांक है, जिसे बनाने के लिए नियम जावास्क्रिप्ट में वर्णित किए जा सकते हैं। हाँ, हाँ। यहां इंडेक्स आपके द्वारा बताए गए तर्क के आधार पर बनाए गए हैं और न केवल एक एनुमरेटेड फ़ंक्शन को ले जाते हैं, बल्कि कुछ शब्दार्थ फ़ंक्शन भी करते हैं। उदाहरण के लिए, आप उन उपयोगकर्ताओं को इंडेक्स में शामिल कर सकते हैं, जिनका ईमेल n वर्णों से लंबा है, या केवल कुछ फ़ील्ड मौजूद हैं। अनुक्रमित के साथ काम करने के लिए, हमारे पास केवल जावास्क्रिप्ट है, लेकिन यह पर्याप्त से अधिक है। सूचकांक या तो मांग पर अपडेट किया जाता है (जब डेटा के लिए अनुरोध) या स्वचालित रूप से जब डेटाबेस विखंडन एक निश्चित प्रतिशत (बकसुआ सेटिंग्स में निर्दिष्ट) तक पहुंचता है। विकसित होने पर इस बिंदु पर भी विचार करने की आवश्यकता है।
व्यू बनाने के दो तरीके हैं। पहला है विकास खंड में नियंत्रण कक्ष में सीधे जावास्क्रिप्ट नियम लिखना और उन्हें उत्पादन में हस्तांतरित करना, या सीधे PHP से सीधे सेटडिजेनडोक विधि को स्क्रिप्ट के विवरण के साथ खींचना जो सीधे उत्पादन खंड में जाएंगे।
सबसे पहले, स्क्रिप्ट पर विचार करें और इसमें क्या होना चाहिए। स्क्रिप्ट एक फ़ंक्शन है जिसके इनपुट पर दस्तावेज़ और उसकी सामग्री की मेटा जानकारी का विवरण है। आइए उपयोगकर्ता के लॉगिन के आधार पर एक इंडेक्स बनाते हुए देखें।
function (doc, meta) {
ऊपर वर्णित जावास्क्रिप्ट विधि के लिए धन्यवाद, आप समझ सकते हैं कि सूचकांक (जो उत्सर्जन विधि का उपयोग करके उत्पन्न होता है) में केवल वे प्रविष्टियां शामिल होंगी जिनमें लॉगिन फ़ील्ड है। जैसा कि आप देख सकते हैं, जावास्क्रिप्ट फ़ंक्शन कॉलबैक फ़ंक्शन के रूप में बनाया गया है, जो इस बकेट में स्थित प्रत्येक रिकॉर्ड पर लागू होगा। यह ध्यान दिया जाना चाहिए कि बाल्टी जीवन चक्र के अस्तित्व के दौरान किसी भी समय दृश्य बनाया जा सकता है। यानी अगर आपको नई कार्यक्षमता जोड़ने की आवश्यकता है, तो आप आसानी से नए विचार जोड़ सकते हैं और जैसे चाहें वैसे रह सकते हैं।
और ऐसा है। यदि हम केवल उसका लॉगिन जानते हैं तो हम यह पता लगाएंगे कि हम उपयोगकर्ता आईडी कैसे खोज सकते हैं। ऐसा करने के लिए, हमें एक नया सूचकांक बनाने की आवश्यकता है (हम इसे PHP कोड से तुरंत बनाएंगे) और इसे कॉल करें।
$designedDocument = array( 'language' => 'javascript', 'views' =>array( 'login' => array( 'map' => 'function (doc, meta) {if (meta.type == "json" && doc.login) {var userid = meta.id.split("::"); emit(doc.login, parseInt(userid[1]));}}' ) ), ); $couchbase->setDesignDoc('userFields', json_encode($designedDocument));
यदि इस कोड को निष्पादित करने के तुरंत बाद, हम काउचबेस कंट्रोल पैनल में जाते हैं, तो हम ऊपरी दाईं ओर इंडेक्स बनाने की प्रगति (बड़े वॉल्यूम पर) देखेंगे। जिसके पूरा होने पर, आप इसके संचालन को नियंत्रण कक्ष में खोलकर और "परिणाम दिखाएँ" बटन पर क्लिक करके देख सकते हैं। उत्तर में, हम कुंजी / मूल्य जोड़े देखेंगे जो जावास्क्रिप्ट कॉलबैक विधि द्वारा उत्पन्न किए गए थे।
PHP कोड से हम निम्नलिखित क्वेरी द्वारा चयन प्राप्त कर सकते हैं:
इसका उत्तर दो तत्वों की एक सरणी होगी: total_rows - जहां इस सूचकांक में रिकॉर्ड की कुल संख्या समाहित होगी और पंक्तियाँ फ़ील्ड - जिसमें हमारे नमूने में सारणियों का एक सरणी होगा: सरणी ('id' => प्रोफ़ाइल "0", 'कुंजी' '=>' मेगासर्ननाम ',' मान '=> 0)। फ़ील्ड के इस सरणी में: _id दस्तावेज़ का पहचानकर्ता है जो चयन में गिर गया। कुंजी वह कुंजी है जो सूचकांक के गठन के दौरान निर्दिष्ट की गई थी, और मूल्य वह मूल्य है जो हमने उत्पन्न किया था।
लेकिन आपको इस तथ्य को ध्यान में रखना चाहिए कि इस तरह से हमें संपूर्ण सूचकांक मिलता है, जो हमारे लिए खोज करने के लिए बिल्कुल उपयुक्त नहीं है। और अगर हमें केवल पहचानकर्ता खोजने की आवश्यकता है? मैन्युअल रूप से पूरे सूचकांक पर पुनरावृति न करें। बिल्कुल नहीं। और इसके लिए, देखने के लिए प्रत्येक अनुरोध के दौरान, आप अतिरिक्त पैरामीटर निर्दिष्ट कर सकते हैं। उदाहरण के लिए, यदि हम लॉगिन द्वारा निर्दिष्ट उपयोगकर्ता के केवल पहचानकर्ता को जानना चाहते हैं, तो हमें देखने के अनुरोध में एक विशिष्ट कुंजी निर्दिष्ट करनी होगी। यह निम्नानुसार किया जाता है:
$result = $couchbase->view('userFields', "login", array('key'=>'megausername'));
और यह एक खुशी का क्षण है जब, परिणामस्वरूप, हमारे पास केवल 'मेगासर्ननाम' के बराबर कुंजी के साथ एक रिकॉर्ड होगा। जिससे हम काम कर सकें और खुश रहें। वहाँ सिर्फ एक नुकसान है जैसा कि ऊपर उल्लेख किया गया है, सूचकांक को निर्दिष्ट बाल्टी में रिकॉर्ड जोड़ने या बदलने के समय फिर से नहीं बनाया गया है, लेकिन केवल जब बाल्टी विखंडन का एक निश्चित प्रतिशत तक पहुंच जाता है।
मान लीजिए कि हमें किसी भी ऑपरेशन को करने से पहले एक उपयोगकर्ता नाम की विशिष्टता की जांच करने की आवश्यकता है। उदाहरण के लिए, उपयोगकर्ता को पंजीकृत करते समय। स्वाभाविक रूप से, हम इस दृश्य के लिए अनुरोध को पूरा करेंगे और डेटाबेस प्रतिक्रिया का विश्लेषण करेंगे। हालांकि, ऐसी संभावना है कि उसी समय एक ही नाम वाला उपयोगकर्ता अभी पंजीकृत हुआ है, और सूचकांक के पुनर्निर्माण के लिए अभी तक समय नहीं है। स्वाभाविक रूप से, जानकारी हमारे पास आएगी कि सूचकांक में ऐसा कोई रिकॉर्ड नहीं है और हमें कुछ संघर्ष मिलेगा। ऐसी स्थिति से बचने के लिए, यह संभव है, जब दृश्य सूचकांक को कॉल किया जाए, तो उसे सूचकांक के पुनर्निर्माण की आवश्यकता का संकेत दिया जाए। यानी सभी कार्य जो इस सूचकांक पर नहीं किए गए थे, उन्हें पहले पूरा किया जाएगा, और उसके बाद क्वेरी को पूरा किया जाएगा और परिणाम वापस किया जाएगा। यह FALSE के मान के साथ बासी विकल्प को जोड़कर किया जाता है। यह इस प्रकार किया जाता है:
$result = $couchbase->view('userFields', "login", array('key'=>'megausername', 'stale'=>FALSE));
इस अनुरोध के परिणामस्वरूप, सूचकांक के साथ काम करने से संबंधित सभी ऑपरेशन पूरे हो जाएंगे और आपको एक वास्तविक परिणाम मिलेगा, जो डेटाबेस में है। ऐसे विशिष्ट डेटा के साथ काम करते समय इस बिंदु पर विचार करना महत्वपूर्ण है।
निष्कर्ष
जैसा कि आप देख सकते हैं, काउचबेस सर्वर के साथ काम करना इतना मुश्किल नहीं है, काम शुरू करने से पहले प्रलेखन का अच्छी तरह से अध्ययन करना और अपने कार्यों को सोचने और विश्लेषण करने के लिए मत भूलना महत्वपूर्ण है। मैंने सभी को काउचबेस में जाने के लिए प्रेरित नहीं किया, लेकिन मैं यह कहना चाहूंगा कि मेरे लिए व्यक्तिगत रूप से डेटाबेस के साथ काम करने की क्षमता बुनियादी रूप से संरचना को बदलने के बिना है जब नए क्षेत्रों को जोड़ना ऊपर वर्णित प्रणाली के विकास में बहुत "स्वादिष्ट" कारक था। हालांकि, कठोर वास्तविकता सब कुछ अपनी जगह पर लौटती है। मेरे विशेष मामले में, वास्तविक समय में व्यक्तिगत क्षेत्रों के लिए आंकड़े तैयार करने और MSSQL इंजन पर चलने वाले सांख्यिकी संग्रहण / विश्लेषण प्रणाली के साथ बातचीत करने के बारे में सवाल उठा। इस तथ्य ने हमारे डीबीए डेवलपर्स के सुविधाजनक काम के लिए "बैसाखी" के संगठन का नेतृत्व किया, जिसके परिणामस्वरूप SQL प्रारूप में क्षेत्र प्रबंधन प्रणाली का दोहराव हुआ। यदि आप अपनी परियोजनाओं में NoSQL डेटाबेस इंजन का उपयोग करना चाहते हैं, तो मैं आपको स्टैंडअलोन परियोजनाओं से शुरू करने की सलाह देता हूं जो आंतरिक बुनियादी ढांचे से बंधे नहीं हैं, जैसे कि आप दर्द रहित रूप से एकीकृत नहीं हो सकते।
यदि आपके कोई प्रश्न हैं, तो मैं आपको प्रलेखन का अध्ययन करने की सलाह देता हूं, जो
www.couchbase.com/documentation पर स्थित है
यदि आप इस विषय में रुचि रखते हैं, तो इसे थोड़ा और जटिल स्तर पर प्रकट किया जा सकता है। SQL आर्टिकल से NoSQL के लिए माइग्रेट करने की कार्यप्रणाली पर विचार करें। विचार करें कि आप काउचबेस के साथ ग्रुप बीवाई, ओआरडीईआर और अन्य दिलचस्प चीजों को कैसे व्यवस्थित कर सकते हैं, साथ ही साथ दस्तावेज़-उन्मुख डेटाबेस के अनुकूलन और डिजाइन के मुद्दों पर अधिक गहराई से विचार कर सकते हैं।