एक NoSQL डेटाबेस के रूप में Elasticsearch

क्या Elasticsearch सर्वर का उपयोग NoSQL डेटाबेस के रूप में किया जा सकता है? एक सकारात्मक जवाब हमें इसके विभिन्न गुणों पर विचार करने की अनुमति देगा, जिनमें वे भी शामिल हैं जिनके कार्यान्वयन से उन्होंने सबसे अधिक लचीली, उत्पादक और स्केल खोज इंजन बनने से इनकार कर दिया। लेकिन इस प्रश्न का उत्तर देने के लिए, आपको पहले NoSQL शब्द पर ही निर्णय लेना चाहिए, क्योंकि संदर्भ के आधार पर इसकी व्याख्या अलग तरीके से की जा सकती है।

आखिरकार NoSQL क्या है?


NoSQL डेवलपर्स यह परिभाषा देते हैं: अगली पीढ़ी का डेटाबेस, जो रिलेशनल, वितरित, ओपन सोर्स और क्षैतिज स्केलेबिलिटी की अस्वीकृति की विशेषता है। काश, इस परिभाषा को सटीक नहीं कहा जा सकता।

तथ्य यह है कि यह SQL के बारे में बिल्कुल नहीं है। आइए बताते हैं। हाइव की क्वेरी भाषा स्पष्ट रूप से SQL से प्रेरित थी। वहीँ इस बारे में कहा जा सकता है कि यह एरिज़ोना भाषा के बारे में है, हालांकि यह धाराओं के साथ काम नहीं करता, बल्कि रिश्तों के साथ। PostgreSQL का इतिहास दिलचस्प है - इसे मूल रूप से Postgres कहा जाता था, Quel को क्वेरी भाषा के रूप में इस्तेमाल किया गया था और ORDBMS था, और आज PostgreSQL के कई कार्य हैं जो इसे एक दस्तावेज़-उन्मुख भंडार होने की अनुमति देते हैं।

इस मामले में, हम ACID के बारे में बात नहीं कर रहे हैं - NoSQL परिभाषा लेनदेन के बारे में कुछ नहीं कहती है। हाइपरडेक्स एक NoSQL डेटाबेस है जिसका उद्देश्य ACID लेनदेन प्रदान करना है। MySQL निस्संदेह SQL का आधार है और इसके इतिहास में ACID का वास्तव में क्या अर्थ है के विषय पर संदिग्ध व्याख्याएं हैं।


रिश्ता। अधिकांश NoSQL डेटाबेस ज्वाइन ऑपरेशन का समर्थन नहीं करते हैं जैसा कि पारंपरिक संबंधपरक डेटाबेस करते हैं, और इस काम को उपयोगकर्ता पर छोड़ देते हैं। लेकिन ऐसे डेटाबेस भी हैं जो इस काम को अपने दम पर करते हैं, जैसे कि RethinkDB , Hive और PigNeo4j ग्राफ डेटाबेस रिश्तों के साथ भी काम करता है - ग्राफ़ के रिश्तों (किनारों) को दरकिनार करता है। एलिटिक्स खोज में अभिभावक / बाल संबंधों के लिए क्वेरी समय में शामिल होने और अनुक्रमण समय में शामिल होने की अवधारणा है, जिसे नेस्टेड प्रकार का उपयोग करके कार्यान्वित किया जाता है।

वितरण। आमतौर पर, SQL डेटाबेस वितरित नहीं किए जाते हैं, और इसके विपरीत, NoSQL वितरित किए जाते हैं। NoSQLite के समान ही प्रॉजेक्ट्स ( node.js NoSQL , ejdb ) भी हैं। हालांकि, अगली पीढ़ी के डेटाबेस एक या दूसरे तरीके से वितरण सुनिश्चित करने के लिए प्रयास कर रहे हैं।

यही है, आप NoSQL की अवधारणा को ठीक से परिभाषित नहीं कर सकते हैं और NoSQL रिपॉजिटरी को Elasticsearch विशेषता दे सकते हैं। पहले से ही लेखन के समय, nosql-database.org में 20 से अधिक ऐसे डेटाबेस थे।

इसके बाद, हम कुछ महत्वपूर्ण गुणों को देखेंगे और देखेंगे कि एलीटेसर्च कैसे लागू करता है।

लेन-देन में कमी


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

एलियटिक्स खोज निकट समय में डेटा हेरफेर और खोज प्रदान करता है। डिफ़ॉल्ट रूप से, डेटा को इंडेक्सिंग / अपडेट / डिलीट करने और खोज परिणामों में इन परिवर्तनों के दिखाई देने के बीच एक दूसरा विस्तार होता है। यह SQL सिस्टम से Elasticsearch को अलग करता है जिसमें लेनदेन पूरा होने के बाद सभी परिवर्तन दिखाई देते हैं।

भेजे गए दस्तावेज़ों के संस्करण को इंगित करके आशावादी संगामिति नियंत्रण किया जाता है।

एलीस्टेकर्च सर्वर गति के लिए डिज़ाइन किया गया है, लेकिन वितरित लेनदेन में समय लगता है और उनकी अनुपस्थिति काम को आसान बनाती है। आप कुछ पुराने डेटा प्राप्त करने के लिए सहमत हो सकते हैं, लेकिन हर कोई एक ही समयरेखा का पालन करेगा, और डेटा की एक बड़ी मात्रा को एलीस्टेकर्च कैश में संग्रहीत किया जाएगा, जो इस सर्वर को यथासंभव उत्पादक बनाता है, क्योंकि वे इसके लिए प्यार करते हैं।

डेटा स्कीमा लचीलापन


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

तथ्य यह है कि "स्कीमा-मुक्त" (इस अर्थ में कि योजना को स्वतंत्र रूप से निर्धारित करने के लिए आवश्यक नहीं है) को "लचीली योजना" के रूप में दर्शाया जा सकता है, बहस योग्य है। एक उत्कृष्ट खोज और विश्लेषण प्रणाली विकसित करने के लिए, आपको अपनी स्वयं की डेटा योजना डिज़ाइन करनी चाहिए। ऐसा करने के लिए, एलीस्टेखर्च में शक्तिशाली उपकरणों का एक व्यापक सेट है, उदाहरण के लिए, गतिशील टेम्पलेट, बहु-फ़ील्ड ऑब्जेक्ट आदि। अधिक विवरण के लिए, मानचित्रण पर लेख देखें।

रिश्ते और मर्यादा


इलास्टिसर्च एक दस्तावेज-उन्मुख डेटाबेस है: जिन वस्तुओं को आप खोजने जा रहे हैं, उनके पूरे पूल को अनुक्रमित किया जाना चाहिए, जिसका अर्थ है कि दस्तावेज़ों को अनुक्रमित करने से पहले इसे असामान्य किया जाना चाहिए। इससे निष्कर्षण प्रदर्शन बढ़ जाता है (चूंकि आपको जुड़ने के अनुरोध की आवश्यकता नहीं होती है), अधिक डिस्क स्थान (अनावश्यक जानकारी के भंडारण के कारण) की आवश्यकता होती है, लेकिन साथ ही डेटा की स्थिरता और प्रासंगिकता सुनिश्चित करना (किसी भी आयाम को बदलने योग्य वस्तु वाले सभी दस्तावेजों को प्रभावित करना अधिक कठिन हो जाता है। हालांकि, यह आदर्श है यदि दस्तावेज़ को एक बार सहेजने की आवश्यकता है, और इसे कई बार पढ़ा जाएगा।

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

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

जैसा कि पहले उल्लेख किया गया है, एलिटिक्स खोज में अभिभावक / बाल संबंधों के लिए क्वेरी समय में शामिल होने और नेस्टेड प्रकार के आधार पर अनुक्रमण समय में शामिल होने की अवधारणा है। हम शायद अगले लेख में इसके बारे में और अधिक विस्तार से बात करेंगे, लेकिन यदि आप चाहें, तो आप मार्टिंज वैन ग्रोनिंगन की प्रस्तुति " एलीटसर्च के साथ दस्तावेज़ संबंध " पढ़ सकते हैं।

अधिकांश संबंधपरक डेटाबेस आपको यह निर्धारित करने के लिए विवश करने की अनुमति देते हैं कि क्या संगत है और क्या नहीं है। उदाहरण के लिए, वे संदर्भात्मक अखंडता और विशिष्टता प्रदान कर सकते हैं, यह इंगित करते हैं कि एक खाते के साथ संचालन का योग सकारात्मक होना चाहिए, आदि दस्तावेज-उन्मुख डेटाबेस, एक नियम के रूप में, ऐसा नहीं करते हैं, और इलास्टिसर्च कोई अपवाद नहीं है।

लचक या मजबूती


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

दुर्भाग्य से, एलिटिक्स खोज, उन घटकों की तरह, जिनसे इसे बनाया गया है, वर्तमान में आउटऑफ़मेरी त्रुटियों को अच्छी तरह से संभाल नहीं पाता है। हम इस लेख में " उत्पादन, आउटऑफ़मैरी-कॉज़ेड क्रैश में एलिटिक्स खोज " पर अधिक विस्तार से ध्यान देंगे। उत्पादन क्लस्टर पर नई अज्ञात मेमोरी आवश्यकताओं के साथ प्रश्नों को शुरू करने से पहले पर्याप्त मेमोरी के साथ एलिटेसर्च प्रदान करना और सावधानी बरतना महत्वपूर्ण है।

हालांकि यह निश्चित होने की संभावना है क्योंकि एलीस्टेकर्च विकसित होता है, यह याद रखना चाहिए कि एलीस्टैचर्च को उच्च गति के लिए बनाया गया था, और यह माना गया था कि सर्वर पर बहुत सारी रैम होगी।

वितरित


इन्हें भी देखें: उत्पादन, नेटवर्किंग में एलिस्टिक्स खोज

इससे पहले कि शॉन बैनोन ने एलेस्टिक्स खोज की, उन्होंने कम्पास पर काम किया। एक निश्चित बिंदु पर, उन्होंने महसूस किया कि कम्पास को एक वितरित खोज इंजन में बदलना बहुत मुश्किल था, और स्क्रैच से एलिटिक्सर्च बनाना शुरू कर दिया। इलास्टिसर्च को सस्ती हार्डवेयर पर बड़ी मात्रा में डेटा को संभालने के लिए वितरित और आसानी से स्केलेबल बनाया गया है।

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

वितरित प्रणालियों की बहुत प्रकृति का अर्थ है कि कई चीजें हैं जो गलत हो सकती हैं। वास्तव में, विभिन्न डेटाबेस के कई फायदे हैं: कुछ में उच्च स्थिरता होती है, अन्य में निरंतर उपलब्धता होती है, हालांकि वे कुछ या लंबे समय तक गलत परिणाम दे सकते हैं। सिद्धांत रूप में, डेटाबेस शायद ही कभी समस्याओं का सामना करता है और, यदि आवश्यक हो, जल्दी से उन्हें हल करता है, जैसा कि काइल किंग्सबरी ने नेटवर्क को भागों में विभाजित करने के जोखिमों के अपने अध्ययन में दिखाया था। उन्होंने दिखाया कि जब डेटाबेस अच्छी तरह से काम कर रहा है, तो इसके अंदर बड़ी संख्या में समस्या निवारण कार्य हो रहे हैं।

निरंतरता, उपलब्धता और नेटवर्क विफलताओं के प्रतिरोध के दृष्टिकोण से, "सुसंगतता" शब्द की एक कमजोर परिभाषा के लिए एलिटोसर्च एक सीपी-प्रणाली (संगति और विभाजन सहिष्णुता) है। यदि रीड-ओनली ऑपरेशंस की भविष्यवाणी की जाती है, तो एलीस्टेसर्च आपको न्यूनतम मास्टर नोड पैरामीटर, यानी कोरम की अनुपस्थिति को कम करके एपी-व्यवहार (उपलब्धता और विभाजन सहिष्णुता) प्राप्त करने की अनुमति देता है। हालांकि, आमतौर पर यह आवश्यक है कि क्लस्टर में अधिकांश नोड्स सुलभ हों। इस बहुमत के बिना, एक गलत बयानी क्लस्टर, यानी एक विभाजित मस्तिष्क क्लस्टर में लिखने से स्थायी डेटा हानि हो सकती है। यह एलिस्टिक्स खोज की विशिष्टता से कोई मतलब नहीं है और अन्य सर्वरों की विशेषता भी है।

एलिटिक्स खोज का अपना "विज़ार्ड" चयन एल्गोरिदम है। यह काफी सरल है और विशेष रूप से स्थिर नहीं है, जो दुर्भाग्य से, नेटवर्क की समस्याओं की वास्तविक दुनिया में बड़ी परेशानी पैदा कर सकता है। संस्थापक में, हम सैकड़ों समूहों का प्रबंधन करते हैं और एक "मास्टर" चुनने की समस्या को अक्सर देखते हैं, इसलिए हम ज़ूकीर के लिए एक "मास्टर" की पसंद को आगे बढ़ाने पर सक्रिय रूप से काम कर रहे हैं, जिसे हमने पहले ही कई अन्य उद्देश्यों के लिए उपयोग किया है।

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

सुरक्षा


इन्हें भी देखें: उत्पादन, सुरक्षा में एलिटिक्स खोज

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

सारांश


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

पोस्टग्रेज जैसी प्रणालियों के बारे में क्या है जो पूर्ण-पाठ खोज और ACID लेनदेन का समर्थन करती हैं (अन्य उदाहरण MySQL, MongoDB, Riak, आदि की पूर्ण-पाठ क्षमताएं हैं)? पोस्टग्रेज में, आप एक मूल खोज को लागू कर सकते हैं, लेकिन यह प्रदर्शन और अन्य विशेषताओं में एलिटिक्स खोज के साथ बड़े अंतर का उल्लेख करने योग्य है। जैसा कि लेन-देन पर अनुभाग में कहा गया है, Elasticsearch मल्टी वर्जन कंसीलर कंट्रोल और अन्य चीजों के बारे में चिंता किए बिना कैशिंग का उपयोग कर सकता है जो काम को जटिल करते हैं। खोज केवल पाठ के एक टुकड़े में एक कीवर्ड खोजने से अधिक है। यह अच्छी प्रासंगिकता मॉडल लागू करने के लिए विशेष ज्ञान को लागू करने के बारे में है जो संभावित परिणामों का अवलोकन करते हैं और वर्तनी जांच और स्वत: पूर्णता जैसी चीजें करते हैं, और यह सब बहुत जल्दी करते हैं।

एलियस्टिक्स की खोज आम तौर पर दूसरे, कोर, डेटाबेस के पूरक के रूप में की जाती है - सीमाओं, शुद्धता और विश्वसनीयता पर एक मजबूत जोर देने के साथ-साथ व्यवहारिक रूप से अद्यतन। तदनुसार, डेटा को पहले मुख्य डेटाबेस में लिखा जाता है, और फिर एलिनास्टिक्स में एसिंक्रोनस रूप से। डेटा सिंक्रनाइज़ेशन सुनिश्चित करना अगले लेख में अधिक विस्तार से चर्चा की जाएगी। हमारे संस्थापक में हम आमतौर पर चिड़ियाघरकीपर, साथ ही साथ पोस्टग्रेक्सेल का उपयोग मुख्य आधार के रूप में करते हैं, जिसे हम एक उत्कृष्ट खोज के लिए एलिटिक्स खोज को पूरक करते हैं।

बाकी सब चीजों की तरह, आपकी सभी सूचनाओं के प्रबंधन के लिए एक भी डेटाबेस नहीं है। एक अच्छी नौकरी के लिए, आपको निश्चित रूप से अपने भंडारण की सभी शक्तियों और कमजोरियों को जानना होगा।

अनुशंसित पढ़ना


शे बैन: कम्पास और एलेस्टिक्स का भविष्य // www.kimchy.org/the_future_of_otpass

पुनश्च। अनुवाद संपादक अनास्तासिया गोर्डोक को धन्यवाद।

Source: https://habr.com/ru/post/In222765/


All Articles