paint-brush
इलास्टिकसर्च अपडेट, इंसर्ट, डिलीट: समझें कि वे कैसे काम करते हैं और उनकी सीमाएँद्वारा@rocksetcloud
4,853 रीडिंग
4,853 रीडिंग

इलास्टिकसर्च अपडेट, इंसर्ट, डिलीट: समझें कि वे कैसे काम करते हैं और उनकी सीमाएँ

द्वारा Rockset12m2024/05/20
Read on Terminal Reader

बहुत लंबा; पढ़ने के लिए

इलास्टिक्सर्च जैसी प्रणाली के लिए, स्ट्रीमिंग डेटा को कुशलतापूर्वक ग्रहण करने के लिए इंजीनियरों को अंतर्निहित आर्किटेक्चर का गहन ज्ञान होना आवश्यक है।
featured image - इलास्टिकसर्च अपडेट, इंसर्ट, डिलीट: समझें कि वे कैसे काम करते हैं और उनकी सीमाएँ
Rockset HackerNoon profile picture


परिचय

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


इलास्टिकसर्च जैसी प्रणाली के लिए, स्ट्रीमिंग डेटा को कुशलतापूर्वक ग्रहण करने के लिए इंजीनियरों को अंतर्निहित वास्तुकला का गहन ज्ञान होना चाहिए। इलास्टिकसर्च को लॉग एनालिटिक्स के लिए डिज़ाइन किया गया था जहाँ डेटा अक्सर नहीं बदलता है, जिससे लेन-देन संबंधी डेटा से निपटने में अतिरिक्त चुनौतियाँ आती हैं।


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


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

Elasticsearch

इलास्टिकसर्च में डेटा अंतर्ग्रहण

यद्यपि Elasticsearch में डेटा डालने के कई तरीके हैं, हम वास्तविक समय खोज और विश्लेषण के लिए तीन सामान्य तरीकों को शामिल करते हैं:


  • Logstash JDBC इनपुट प्लगइन का उपयोग करके रिलेशनल डेटाबेस से Elasticsearch में डेटा इंजेस्ट करें

  • Kafka Elasticsearch सर्विस सिंक कनेक्टर का उपयोग करके Kafka से Elasticsearch में डेटा प्राप्त करें

  • REST API और क्लाइंट लाइब्रेरी का उपयोग करके एप्लिकेशन से सीधे Elasticsearch में डेटा डालें


Logstash JDBC इनपुट प्लगइन का उपयोग करके रिलेशनल डेटाबेस से Elasticsearch में डेटा डालें। Logstash JDBC इनपुट प्लगइन का उपयोग PostgreSQL या MySQL जैसे रिलेशनल डेटाबेस से खोज और विश्लेषण के लिए Elasticsearch में डेटा लोड करने के लिए किया जा सकता है।


लॉगस्टैश एक इवेंट प्रोसेसिंग पाइपलाइन है जो डेटा को एलास्टिकसर्च में भेजने से पहले उसे ग्रहण और रूपांतरित करती है। लॉगस्टैश एक JDBC इनपुट प्लगइन प्रदान करता है जो PostgreSQL या MySQL जैसे रिलेशनल डेटाबेस को समय-समय पर इन्सर्ट और अपडेट के लिए पोल करता है। इस सेवा का उपयोग करने के लिए, आपके रिलेशनल डेटाबेस को टाइमस्टैम्प्ड रिकॉर्ड प्रदान करने की आवश्यकता होती है जिसे लॉगस्टैश द्वारा पढ़ा जा सकता है ताकि यह निर्धारित किया जा सके कि कौन से परिवर्तन हुए हैं।


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


काफ्का इलास्टिकसर्च सिंक कनेक्टर का उपयोग करके काफ्का से इलास्टिकसर्च में डेटा प्राप्त करें। वास्तविक समय की खोज और विश्लेषण के लिए स्रोत सिस्टम से इलास्टिकसर्च में डेटा भेजने के लिए काफ्का जैसे इवेंट स्ट्रीमिंग प्लेटफॉर्म का उपयोग करना भी आम है।


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


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


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


यदि आप कॉनफ्लुएंट या इलास्टिक से प्रबंधित सेवाओं का उपयोग नहीं करते हैं, तो आप इलास्टिकसर्च को डेटा भेजने के लिए लॉगस्टैश के लिए ओपन-सोर्स काफ्का प्लगइन का उपयोग कर सकते हैं।


REST API और क्लाइंट लाइब्रेरी का उपयोग करके सीधे एप्लिकेशन से Elasticsearch में डेटा डालें Elasticsearch, आपके एप्लिकेशन से सीधे REST API के माध्यम से डेटा डालने के लिए Java, Javascript, Ruby, Go, Python और अन्य सहित समर्थित क्लाइंट लाइब्रेरी का उपयोग करने की क्षमता प्रदान करता है। क्लाइंट लाइब्रेरी का उपयोग करने में चुनौतियों में से एक यह है कि इसे कतारबद्धता और बैक-प्रेशर के साथ काम करने के लिए कॉन्फ़िगर किया जाना चाहिए, जब Elasticsearch इनजेस्ट लोड को संभालने में असमर्थ हो। कतारबद्धता प्रणाली के बिना, Elasticsearch में डेटा हानि की संभावना है।

Elasticsearch में अपडेट, इन्सर्ट और डिलीट

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


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


चित्र 1: इलास्टिकसर्च डेटा को ल्यूसीन इंडेक्स में संग्रहीत किया जाता है और उस इंडेक्स को छोटे खंडों में विभाजित किया जाता है।


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


इलास्टिकसर्च में विलोपन और सेगमेंट मर्ज चुनौतियां

इलास्टिकसर्च में पुराने दस्तावेजों को हटाने और स्थान पुनः प्राप्त करने से संबंधित चुनौतियाँ हो सकती हैं।


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


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



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

इलास्टिकसर्च में प्रतिकृति चुनौतियां

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

इलास्टिकसर्च में बल्क एपीआई और कतार चुनौतियां

जबकि आप Elasticsearch में अपडेट API का उपयोग कर सकते हैं, यह आमतौर पर बल्क API का उपयोग करके लगातार परिवर्तनों को बैच करने के लिए अनुशंसित है। बल्क API का उपयोग करते समय, इंजीनियरिंग टीमों को अक्सर सिस्टम में अपडेट को सुव्यवस्थित करने के लिए एक कतार बनाने और प्रबंधित करने की आवश्यकता होगी।


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

इलास्टिकसर्च में पुनः अनुक्रमण

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


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


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

रॉकसेट

रॉकसेट में डेटा अंतर्ग्रहण

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


उच्च स्तर पर, रॉकसेट OLTP डेटाबेस, डेटा स्ट्रीम और डेटा लेक और वेयरहाउस के लिए बिल्ट-इन कनेक्टर प्रदान करता है। यहाँ बताया गया है कि वे कैसे काम करते हैं:


OLTP डेटाबेस के लिए अंतर्निहित कनेक्टर रॉकसेट आपके OLTP डेटाबेस में आपकी तालिकाओं का प्रारंभिक स्कैन करता है और फिर नवीनतम डेटा के साथ सिंक में रहने के लिए CDC स्ट्रीम का उपयोग करता है, जिसमें स्रोत सिस्टम द्वारा उत्पन्न होने के 2 सेकंड के भीतर डेटा को क्वेरी के लिए उपलब्ध कराया जाता है।


डेटा स्ट्रीम के लिए अंतर्निहित कनेक्टर काफ्का या किनेसिस जैसी डेटा स्ट्रीम के साथ, रॉकसेट लगातार किसी भी नए विषय को पुल-आधारित एकीकरण का उपयोग करके ग्रहण करता है, जिसके लिए काफ्का या किनेसिस में किसी ट्यूनिंग की आवश्यकता नहीं होती है।


डेटा लेक और वेयरहाउस के लिए बिल्ट-इन कनेक्टर रॉकसेट लगातार अपडेट की निगरानी करता है और S3 बकेट जैसे डेटा लेक से किसी भी नए ऑब्जेक्ट को ग्रहण करता है। हम आम तौर पर पाते हैं कि टीमें रीयल-टाइम एनालिटिक्स के लिए अपने डेटा लेक से डेटा के साथ रीयल-टाइम स्ट्रीम में शामिल होना चाहती हैं।

रॉकसेट में अपडेट, इन्सर्ट और डिलीट

रॉकसेट में एक वितरित वास्तुकला है जो एकाधिक मशीनों में समानांतर रूप से डेटा को कुशलतापूर्वक अनुक्रमित करने के लिए अनुकूलित है।


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


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


रॉकसेट का कन्वर्ज्ड इंडेक्स फ़ील्ड के सभी मानों को खोज इंडेक्स, कॉलम स्टोर और रो स्टोर में कुंजी-मूल्य जोड़े की एक श्रृंखला के रूप में संग्रहीत करता है।


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


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


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

रॉकसेट एपीआई का उपयोग करके अपडेट, सम्मिलित और हटाना

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


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


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

रॉकसेट में प्रतिकृतियों को संभालना

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

रॉकसेट में पुनः अनुक्रमण

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


ऐसा कहा जाता है कि, रॉकसेटस्कीमलेस इंजेस्ट को सक्षम बनाता है और डेटा के हर क्षेत्र के मानों को गतिशील रूप से टाइप करता है। यदि डेटा या क्वेरी का आकार और स्वरूप बदलता है, तो रॉकसेट प्रदर्शन करना जारी रखेगा और डेटा को फिर से अनुक्रमित करने की आवश्यकता नहीं होगी।


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

निष्कर्ष

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


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


कुल मिलाकर, हमने देखा है कि जो कंपनियाँ रियल-टाइम एनालिटिक्स के लिए Elasticsearch से Rockset पर माइग्रेट करती हैं, वे सिर्फ़ अपने कंप्यूट बिल पर 44% की बचत करती हैं। कुछ ही दिनों में Elasticsearch से Rockset पर स्विच करने वाली इंजीनियरिंग टीमों की लहर में शामिल हो जाएँ। आज ही अपना निःशुल्क परीक्षण शुरू करें।