Cassandra क्वेरी भाषा (CQL): सम्मिलित करना, अद्यतन करना और हटाना

⚡ स्मार्ट सारांश

Cassandra क्वेरी लैंग्वेज SQL के समान सिंटैक्स का उपयोग करके इंसर्ट, अपडेट, डिलीट और रीड ऑपरेशन को हैंडल करती है, लेकिन इसके मूल सिद्धांत अलग हैं। यह पेज प्रत्येक स्टेटमेंट, इंसर्ट और अपडेट को मर्ज करने वाले अप्सर्ट व्यवहार और WHERE क्लॉज़ की वास्तविक सीमाओं को कवर करता है।

  • व्यवहार सम्मिलित करें: केवल प्राथमिक कुंजी ही अनिवार्य है, और छोड़े गए कॉलम कोई स्टोरेज नहीं लेते हैं।
  • 🔄 अप्सर्ट सिमेंटिक्स: इन्सर्ट और अपडेट एक ही ऑपरेशन हैं, इसलिए किसी मौजूदा कुंजी को लिखने से वह अपने आप ओवरराइट हो जाती है।
  • हटाने की लागत: हटाई गई पंक्तियाँ समाधि-पत्थर बन जाती हैं और संपीड़न प्रक्रिया पूरी होने के बाद ही गायब होती हैं।
  • 🔍 जहां खंड सीमाएं: फ़िल्टरिंग प्राथमिक कुंजी वाले कॉलम पर या इंडेक्स मौजूद होने पर अन्य कॉलम पर काम करती है।
  • 📊 कुल समर्थन: गणना, न्यूनतम, अधिकतम, योग, AVG और ग्रुप बाय का समर्थन किया जाता है, हालांकि यह केवल एक ही विभाजन के भीतर कुशलतापूर्वक काम करता है।
  • 🚫 अभी भी असमर्थित: डिजाइन के अनुसार, जॉइन, OR कंडीशन और क्रॉस-पार्टिशन एनालिटिक्स CQL से बाहर रखे गए हैं।

Cassandra CQL सम्मिलित करें अद्यतन करें हटाएं

डेटा डालें

RSI Cassandra इन्सर्ट स्टेटमेंट डेटा लिखता है Cassandra पंक्ति रूप में स्तंभ. Cassandra इन्सर्ट क्वेरी केवल उन कॉलम को स्टोर करेगी जो उपयोगकर्ता द्वारा दिए गए हैं। आपको केवल प्राथमिक कुंजी कॉलम निर्दिष्ट करना होगा।

यह दिए गए मानों के लिए कोई स्थान नहीं लेगा। प्रविष्टि के बाद कोई परिणाम नहीं लौटाया जाता है।

वाक्य - विन्यास

INSERT INTO KeyspaceName.TableName (ColumnName1, ColumnName2, ColumnName3)
VALUES (Column1Value, Column2Value, Column3Value);

उदाहरण

यहां निष्पादित घटना का स्नैपशॉट दिया गया है Cassandra तालिका में सम्मिलित करें क्वेरी जो एक रिकॉर्ड सम्मिलित करेगी Cassandra तालिका 'छात्र'.

डेटा डालें

INSERT INTO University.Student (RollNo, Name, dept, Semester)
VALUES (2, 'Michael', 'CS', 2);

Insert into कमांड के सफल निष्पादन के बाद Cassandra, एक पंक्ति डाली जाएगी Cassandra तालिका छात्र रोल नं 2, नाम माइकल, विभाग सीएस और सेमेस्टर 2।

यहाँ वर्तमान डेटाबेस स्थिति का स्नैपशॉट दिया गया है।

डेटा डालें

अपसर्ट डेटा

Cassandra अपसर्ट का मतलब है कि Cassandra यदि प्राथमिक कुंजी पहले से मौजूद नहीं है तो यह एक पंक्ति सम्मिलित करेगा, अन्यथा यदि प्राथमिक कुंजी पहले से मौजूद है तो यह उस पंक्ति को अद्यतन करेगा।

इसका एक व्यावहारिक परिणाम है जिसे स्पष्ट रूप से बताना आवश्यक है: INSERT कभी भी डुप्लिकेट कुंजी त्रुटि की रिपोर्ट नहीं करता है, इसलिए गलती से पुनः सम्मिलित करने पर मौजूदा पंक्ति बिना किसी चेतावनी के ओवरराइट हो जाती है। जब इसे रोकना आवश्यक हो, तो स्टेटमेंट को सरल बनाने के लिए IF NOT EXISTS जोड़ें।

INSERT INTO University.Student (RollNo, Name)
VALUES (2, 'Michael') IF NOT EXISTS;

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

अद्यतन आकड़ें

RSI Cassandra अद्यतन क्वेरी का उपयोग डेटा को अद्यतन करने के लिए किया जाता है Cassandra तालिकायदि डेटा अपडेट करने के बाद कोई परिणाम नहीं लौटाया जाता है, तो इसका मतलब है कि डेटा सफलतापूर्वक अपडेट हो गया है अन्यथा एक त्रुटि लौटाई जाएगी। कॉलम मान 'सेट' क्लॉज में बदले जाते हैं जबकि डेटा 'व्हेयर' क्लॉज के साथ फ़िल्टर किया जाता है।

वाक्य - विन्यास

UPDATE KeyspaceName.TableName
SET ColumnName1 = NewValue1,
    ColumnName2 = NewValue2
WHERE ColumnName = ColumnValue;

उदाहरण

यहां स्क्रीनशॉट है जो डेटा अपडेट करने से पहले डेटाबेस की स्थिति दिखाता है।

अद्यतन आकड़ें

यहां निष्पादित घटना का स्नैपशॉट दिया गया है Cassandra अद्यतन आदेश जो विद्यार्थी तालिका में रिकॉर्ड को अद्यतन करता है।

अद्यतन आकड़ें

UPDATE University.Student
SET name = 'Hayden'
WHERE rollno = 1;

अद्यतन क्वेरी के सफल निष्पादन के बाद Cassandra 'छात्र अपडेट करें', छात्र का नाम 'क्लार्क' से बदलकर 'हेडन' कर दिया जाएगा जिसका रोल नंबर 1 है।

यहां स्क्रीनशॉट है जो डेटा अपडेट करने के बाद डेटाबेस की स्थिति दिखाता है।

अद्यतन आकड़ें

अप्सर्ट व्यवहार के कारण, किसी ऐसी प्राथमिक कुंजी के विरुद्ध अपडेट करने पर जो मौजूद नहीं है, वह विफल होने के बजाय पंक्ति का निर्माण करता है।

Cassandra डेटा हटाएं

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

वाक्य - विन्यास

DELETE FROM KeyspaceName.TableName
WHERE ColumnName1 = ColumnValue;

ऊपर Cassandra डिलीट रो सिंटैक्स एक या अधिक पंक्तियों को हटा देगा, जो कि where क्लॉज में डेटा फ़िल्टरेशन पर निर्भर करता है।

DELETE ColumnName1, ColumnName2 FROM KeyspaceName.TableName
WHERE ColumnName1 = ColumnValue;

उपरोक्त सिंटैक्स तालिका से कुछ कॉलम हटा देगा।

उदाहरण

यहां स्नैपशॉट दिया गया है जो डेटा हटाने से पहले वर्तमान डेटाबेस स्थिति को दर्शाता है।

Cassandra डेटा हटाएं

यहां उस कमांड का स्नैपशॉट दिया गया है जो Student तालिका से एक पंक्ति हटा देगा।

Cassandra डेटा हटाएं

DELETE FROM University.Student WHERE rollno = 1;

CQL डिलीट कमांड के सफल निष्पादन के बाद, स्टूडेंट टेबल से एक पंक्ति हटा दी जाएगी जहां रोल नंबर का मान 1 है।

यहां स्नैपशॉट है जो डेटा हटाने के बाद डेटाबेस की स्थिति दिखाता है।

Cassandra डेटा हटाएं

टॉम्बस्टोन gc_grace_seconds तक बने रहते हैं, जो डिफ़ॉल्ट रूप से दस दिन होते हैं, ताकि डिलीट के दौरान ऑफ़लाइन रहने वाला नोड वापस आने पर पंक्ति को पुनर्जीवित न कर सके। इसलिए, बड़ी मात्रा में डेटा डिलीट करने पर ऐसे मार्कर रह जाते हैं जिन्हें हर बार पढ़ने पर स्कैन करना पड़ता है।

क्या Cassandra समर्थन नहीं करता

CQL SQL के सिंटैक्स को अपनाता है, लेकिन रिलेशनल एक्जीक्यूशन मॉडल को नहीं, इसलिए कई परिचित संरचनाएं अलग तरह से व्यवहार करती हैं या अनुपस्थित होती हैं।

  1. CQL तालिकाओं के बीच जॉइन का समर्थन नहीं करता है। संबंधित डेटा को लिखने के समय एक ही तालिका में डीनॉर्मलाइज़ किया जाना चाहिए।
  2. CQL, WHERE क्लॉज़ में OR शर्तों का समर्थन नहीं करता है। किसी एक कॉलम पर IN का उपयोग करें, या अलग-अलग क्वेरी चलाएँ।
  3. CQL UNION या INTERSECT को सपोर्ट नहीं करता है।
  4. जब तक किसी कॉलम पर इंडेक्स मौजूद नहीं होता, तब तक नॉन-प्राइमरी-की कॉलम को फ़िल्टर नहीं किया जा सकता है।
  5. ग्रेटर देन और लेस देन तुलनाएँ केवल क्लस्टरिंग कॉलम पर लागू होती हैं, क्योंकि डिस्क पर केवल वही सॉर्ट किए जाते हैं।
  6. LIKE के साथ पैटर्न मिलान के लिए SASI इंडेक्स की आवश्यकता होती है और यह सामान्य कॉलम पर उपलब्ध नहीं है।

एक लंबे समय से चली आ रही शिकायत को सुधारने की आवश्यकता है। एग्रीगेट फ़ंक्शन समर्थित हैं: गणना, न्यूनतम, अधिकतम, योग और AVG पहुँच गए Cassandra 2.2, और समूह द्वारा यह 3.10 में आ गया है। इसमें ध्यान देने वाली बात उपलब्धता की नहीं बल्कि इसका दायरा है।

SELECT dept, COUNT(*) FROM University.Student
WHERE RollNo = 1 GROUP BY dept;

ऊपर बताए अनुसार, एक ही विभाजन तक सीमित होने पर, एग्रीगेट कुशल होता है। पूरी टेबल पर चलाने पर यह क्लस्टर-व्यापी स्कैन बन जाता है, यही कारण है Cassandra यह तदर्थ विश्लेषण के लिए अनुपयुक्त बना हुआ है और यही कारण है कि भारी रिपोर्टिंग को आमतौर पर आगे बढ़ाया जाता है। Spark या फिर कोई बाहरी गोदाम।

Cassandra कहां क्लॉज

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

वाक्य - विन्यास

SELECT ColumnNames FROM KeyspaceName.TableName
WHERE ColumnName1 = Column1Value
  AND ColumnName2 = Column2Value;

उदाहरण

  • यहां वह स्नैपशॉट है जो डेटा फ़िल्टरेशन के बिना स्टूडेंट तालिका से डेटा पुनर्प्राप्ति को दर्शाता है।

Cassandra कहां क्लॉज

SELECT * FROM University.Student;

स्टूडेंट तालिका से दो रिकॉर्ड प्राप्त किये गये।

  • यहाँ वह स्नैपशॉट है जो डेटा फ़िल्टरेशन के साथ छात्र से डेटा पुनर्प्राप्ति को दर्शाता है। एक रिकॉर्ड पुनर्प्राप्त किया गया है।

डेटा को नाम कॉलम के आधार पर फ़िल्टर किया जाता है। वे सभी रिकॉर्ड प्राप्त किए जाते हैं जिनका नाम एक समान है। Guru99.

Cassandra कहां क्लॉज

SELECT * FROM University.Student WHERE name = 'Guru99';

वे नियम जो यह निर्धारित करते हैं कि WHERE क्लॉज़ किन कॉलमों को संदर्भित कर सकता है, सीधे प्राथमिक कुंजी से प्राप्त होते हैं।

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

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

अक्सर पूछे जाने वाले प्रश्न

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

ड्राइवर पेजिंग स्टेट टोकन का उपयोग करके स्वचालित रूप से पेजिंग करते हैं। cqlsh में, PAGING आकार निर्धारित करता है। काउंटर के साथ OFFSET का अनुकरण करने से बचें, क्योंकि Cassandra इसमें कोई कुशल पंक्ति-छोड़ने की सुविधा नहीं है।ping तंत्र।

यदि कोई प्रतिकृति gc_grace_seconds से अधिक समय तक बंद रहती है और टॉम्बस्टोन पहले ही संकुचित हो चुका होता है, तो वह प्रतिकृति अभी भी पुरानी पंक्ति को धारण करती है और उसे वापस फैला देती है। नियमित मरम्मत इसे रोकती है।

साधारण सिंगल-टेबल सेलेक्ट क्वेरी आसानी से कन्वर्ट हो जाती हैं। जॉइन, OR या सबक्वेरी वाली किसी भी क्वेरी का CQL में कोई सीधा समकक्ष नहीं है, और AI अक्सर ALLOW FILTERING का उपयोग करके इस कमी को पूरा करने की कोशिश करता है, जो कि कोई समाधान नहीं है।

हाँ। पेस्ट कर रहा हूँ। TRACING ON आउटपुट आमतौर पर टॉम्बस्टोन स्कैन, वाइड पार्टीशन या क्रॉस-नोड हॉप्स की स्पष्ट रीडिंग देता है। इसे लागू करने से पहले सुझाए गए स्कीमा परिवर्तन को एक कॉपी पर सत्यापित करें।

इस पोस्ट को संक्षेप में इस प्रकार लिखें: