Cassandra لغة الاستعلام (CQL): إدراج، تحديث، حذف
⚡ ملخص ذكي
Cassandra تتعامل لغة الاستعلام مع عمليات الإدراج والتحديث والحذف والقراءة باستخدام بنية قريبة من لغة SQL ولكن بدلالات مختلفة. تشرح هذه الصفحة كل عبارة، وسلوك عملية الإدراج والتحديث التي تدمج الإدراج والتحديث، والحدود الفعلية لعبارة WHERE.

أدخل البيانات
استخدم 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);
بعد التنفيذ الناجح للأمر أدخل في Cassandra، سيتم إدراج صف واحد في Cassandra طالب الجدول رقم 2، الاسم مايكل، قسم علوم الكمبيوتر والفصل الدراسي 2.
فيما يلي لقطة لحالة قاعدة البيانات الحالية.
رفع البيانات
Cassandra لا يزعج. Upsert يعني ذلك Cassandra سيتم إدراج صف إذا لم يكن المفتاح الأساسي موجودًا بالفعل، وإلا إذا كان المفتاح الأساسي موجودًا بالفعل، فسيتم تحديث هذا الصف.
لهذا الأمر تبعات عملية جديرة بالتوضيح: لا يُبلغ أمر INSERT عن خطأ المفتاح المكرر، لذا فإن إعادة الإدخال غير المقصودة تستبدل الصف الموجود دون سابق إنذار. ولمنع حدوث ذلك، أضف عبارة IF NOT EXISTS لجعل العملية سريعة وخفيفة.
INSERT INTO University.Student (RollNo, Name) VALUES (2, 'Michael') IF NOT EXISTS;
تستخدم المعاملات الخفيفة جولة توافق آراء عبر النسخ المتماثلة، لذا فهي أبطأ بكثير من عملية الكتابة العادية ويجب حجزها للحالات التي تحتاج إلى التحقق بالفعل.
تحديث البيانات
استخدم Cassandra يتم استخدام استعلام التحديث لتحديث البيانات في Cassandra جدولإذا لم يتم إرجاع أي نتائج بعد تحديث البيانات، فهذا يعني أن البيانات تم تحديثها بنجاح وإلا فسيتم إرجاع خطأ. يتم تغيير قيم الأعمدة في بند "Set" بينما يتم تصفية البيانات باستخدام بند "Where".
بناء الجملة
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 سيؤدي بناء جملة حذف الصف إلى حذف صف واحد أو أكثر بناءً على تصفية البيانات في جملة المكان.
DELETE ColumnName1, ColumnName2 FROM KeyspaceName.TableName WHERE ColumnName1 = ColumnValue;
سيؤدي بناء الجملة أعلاه إلى حذف بعض الأعمدة من الجدول.
مثال
فيما يلي اللقطة التي توضح حالة قاعدة البيانات الحالية قبل حذف البيانات.
فيما يلي لقطة للأمر الذي سيؤدي إلى إزالة صف واحد من جدول الطالب.
DELETE FROM University.Student WHERE rollno = 1;
بعد التنفيذ الناجح لأمر الحذف CQL، سيتم حذف صف واحد من جدول الطلاب حيث تكون قيمة rollno هي 1.
فيما يلي اللقطة التي توضح حالة قاعدة البيانات بعد حذف البيانات.
تبقى علامات الحذف محفوظة لمدة gc_grace_seconds، أي عشرة أيام افتراضيًا، بحيث لا يمكن للعقدة غير المتصلة بالإنترنت أثناء الحذف استعادة الصف عند عودتها. وبالتالي، فإن حذف وحدات تخزين كبيرة يترك علامات يجب على كل عملية قراءة لاحقة تجاوزها.
ابحث عن Cassandra لا يدعم
تستعير لغة CQL صيغة SQL ولكن ليس نموذج التنفيذ العلائقي، لذلك فإن العديد من البنى المألوفة تتصرف بشكل مختلف أو تكون غائبة.
- لا يدعم CQL عمليات الربط بين الجداول. يجب إلغاء تطبيع البيانات المرتبطة في جدول واحد عند الكتابة.
- لا يدعم CQL شروط OR في جملة WHERE. استخدم IN على عمود واحد، أو قم بتشغيل استعلامات منفصلة.
- لا يدعم CQL عمليات UNION أو INTERSECT.
- لا يمكن تصفية الأعمدة غير المفتاح الأساسي إلا بعد وجود فهرس عليها.
- تنطبق مقارنات أكبر من وأصغر من فقط على أعمدة التجميع، لأن هذه الأعمدة فقط هي التي يتم فرزها على القرص.
- تتطلب مطابقة الأنماط باستخدام LIKE فهرس SASI وهي غير متاحة على الأعمدة العادية.
هناك ادعاء قديم يحتاج إلى تصحيح. يتم دعم الدوال التجميعية. العد، الحد الأدنى، الحد الأقصى، المجموع و AVG وصلت في Cassandra 2.2، و GROUP BY وصل في الإصدار 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 مباشرة من المفتاح الأساسي.
- استخدم مفتاح التقسيم يجب توفيرها بالكامل لأي استعلام فعال، لأنها تحدد العقدة التي تحتوي على البيانات.
- Clusterأعمدة الإدخال قد تُفرض قيود عليها، ولكن فقط بالترتيب الذي أُعلنت به. تخطيping يتم رفض أحدهما.
- يُسمح بإجراء مقارنات النطاقات على عمود التجميع الأخير المشار إليه، وليس على الأعمدة السابقة.
- اي عمود آخر يحتاج إلى فهرس ثانوي، وهو ما تم تغطيته في إنشاء وحذف الفهرس البرنامج التعليمي.
عند رفض الاستعلام، Cassandra غالباً ما يُقترح إضافة ALLOW FILTERING. تعامل مع ذلك على أنه تحذير وليس حلاً: فهو يفحص كل قسم على كل عقدة، وتغيير المخطط هو الاستجابة الصحيحة في أغلب الأحيان.










