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

डेटा डालें
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;
उपरोक्त सिंटैक्स तालिका से कुछ कॉलम हटा देगा।
उदाहरण
यहां स्नैपशॉट दिया गया है जो डेटा हटाने से पहले वर्तमान डेटाबेस स्थिति को दर्शाता है।
यहां उस कमांड का स्नैपशॉट दिया गया है जो Student तालिका से एक पंक्ति हटा देगा।
DELETE FROM University.Student WHERE rollno = 1;
CQL डिलीट कमांड के सफल निष्पादन के बाद, स्टूडेंट टेबल से एक पंक्ति हटा दी जाएगी जहां रोल नंबर का मान 1 है।
यहां स्नैपशॉट है जो डेटा हटाने के बाद डेटाबेस की स्थिति दिखाता है।
टॉम्बस्टोन gc_grace_seconds तक बने रहते हैं, जो डिफ़ॉल्ट रूप से दस दिन होते हैं, ताकि डिलीट के दौरान ऑफ़लाइन रहने वाला नोड वापस आने पर पंक्ति को पुनर्जीवित न कर सके। इसलिए, बड़ी मात्रा में डेटा डिलीट करने पर ऐसे मार्कर रह जाते हैं जिन्हें हर बार पढ़ने पर स्कैन करना पड़ता है।
क्या Cassandra समर्थन नहीं करता
CQL SQL के सिंटैक्स को अपनाता है, लेकिन रिलेशनल एक्जीक्यूशन मॉडल को नहीं, इसलिए कई परिचित संरचनाएं अलग तरह से व्यवहार करती हैं या अनुपस्थित होती हैं।
- CQL तालिकाओं के बीच जॉइन का समर्थन नहीं करता है। संबंधित डेटा को लिखने के समय एक ही तालिका में डीनॉर्मलाइज़ किया जाना चाहिए।
- CQL, WHERE क्लॉज़ में OR शर्तों का समर्थन नहीं करता है। किसी एक कॉलम पर IN का उपयोग करें, या अलग-अलग क्वेरी चलाएँ।
- CQL UNION या INTERSECT को सपोर्ट नहीं करता है।
- जब तक किसी कॉलम पर इंडेक्स मौजूद नहीं होता, तब तक नॉन-प्राइमरी-की कॉलम को फ़िल्टर नहीं किया जा सकता है।
- ग्रेटर देन और लेस देन तुलनाएँ केवल क्लस्टरिंग कॉलम पर लागू होती हैं, क्योंकि डिस्क पर केवल वही सॉर्ट किए जाते हैं।
- 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;
उदाहरण
- यहां वह स्नैपशॉट है जो डेटा फ़िल्टरेशन के बिना स्टूडेंट तालिका से डेटा पुनर्प्राप्ति को दर्शाता है।
SELECT * FROM University.Student;
स्टूडेंट तालिका से दो रिकॉर्ड प्राप्त किये गये।
- यहाँ वह स्नैपशॉट है जो डेटा फ़िल्टरेशन के साथ छात्र से डेटा पुनर्प्राप्ति को दर्शाता है। एक रिकॉर्ड पुनर्प्राप्त किया गया है।
डेटा को नाम कॉलम के आधार पर फ़िल्टर किया जाता है। वे सभी रिकॉर्ड प्राप्त किए जाते हैं जिनका नाम एक समान है। Guru99.
SELECT * FROM University.Student WHERE name = 'Guru99';
वे नियम जो यह निर्धारित करते हैं कि WHERE क्लॉज़ किन कॉलमों को संदर्भित कर सकता है, सीधे प्राथमिक कुंजी से प्राप्त होते हैं।
- RSI विभाजन कुंजी किसी भी कुशल क्वेरी के लिए इसे पूरी तरह से उपलब्ध कराया जाना चाहिए, क्योंकि यह डेटा रखने वाले नोड की पहचान करता है।
- Clusterइंग कॉलम इसके बाद उन पर प्रतिबंध लगाया जा सकता है, लेकिन केवल उसी क्रम में जिस क्रम में उन्हें घोषित किया गया था। छोड़ेंping एक को अस्वीकार कर दिया गया है।
- अंतिम संदर्भित क्लस्टरिंग कॉलम पर ही रेंज तुलना की अनुमति है, इससे पहले वाले कॉलम पर नहीं।
- कोई अन्य स्तंभ इसके लिए एक द्वितीयक अनुक्रमणिका की आवश्यकता है, जिसका विवरण इसमें दिया गया है। इंडेक्स बनाएं और हटाएं ट्यूटोरियल।
जब कोई क्वेरी अस्वीकृत हो जाती है, Cassandra अक्सर ALLOW FILTERING जोड़ने का सुझाव दिया जाता है। इसे एक चेतावनी के रूप में लें, समाधान के रूप में नहीं: यह प्रत्येक नोड पर प्रत्येक विभाजन को स्कैन करता है, और स्कीमा परिवर्तन लगभग हमेशा सही प्रतिक्रिया होती है।










