Cassandra مدة البقاء & Cassandra أنواع بيانات CQL (مثال)
⚡ ملخص ذكي
Cassandra تُحدد أنواع البيانات ما يمكن أن يحتويه كل عمود، ويتحكم TTL في مدة بقاء القيمة قبل انتهاء صلاحيتها تلقائيًا. تُدرج هذه الصفحة جميع أنواع CQL، وتشرح آلية انتهاء الصلاحية، وتُغطي سلوك علامة الحذف الذي يلي انتهاء الصلاحية.

Cassandra أنواع البيانات
Cassandra يدعم أنواع مختلفة من أنواع البيانات. فيما يلي الجدول الذي يوضح أنواع البيانات وثوابتها ووصفها.
| نوع سي كيو إل | ثابت | الوصف |
|---|---|---|
| أسكي | سلاسل | سلسلة أحرف US-Ascii |
| BIGINT | الأعداد الصحيحة | 64 بت موقعة طويلة |
| سائل | النقط | البايتات التعسفية بالنظام الست عشري |
| منطقية | القيم المنطقية | صحيحة أو خاطئة |
| مواجهة | الأعداد الصحيحة | قيم العداد الموزعة 64 بت |
| تاريخ | الأعداد الصحيحة، السلاسل | تاريخ التقويم بدون عنصر زمني |
| عدد عشري | الأعداد الصحيحة، والعوامات | دقة عشرية متغيرة |
| مضاعفة | الأعداد الصحيحة، والعوامات | نقطة عائمة 64 بت |
| مدة الأقامة | المدة | فترة تمتد لأشهر وأيام وأجزاء من الثانية |
| الطفو | الأعداد الصحيحة، والعوامات | نقطة عائمة 32 بت |
| مجمد | الصفوف والمجموعات والأنواع التي يحددها المستخدم | يخزن قيمة متعددة الأجزاء ككتلة واحدة غير قابلة للتغيير |
| إنت | سلاسل | عنوان IP بتنسيق IPv4 أو IPv6 |
| مادبا | الأعداد الصحيحة | عدد صحيح موقّع مكون من 32 بت |
| الإدارية | مجموعة مرتبة من العناصر | |
| رسم خريطة | مجموعة من أزواج المفاتيح والقيم بنمط JSON | |
| طقم | مجموعة غير مرتبة من العناصر الفريدة | |
| com.miniint | الأعداد الصحيحة | عدد صحيح موقّع مكون من 16 بت |
| نص | سلاسل | سلسلة مشفرة UTF-8 |
| الوقت | الأعداد الصحيحة، السلاسل | الوقت من اليوم بدقة نانوثانية |
| الطابع الزمني | الأعداد الصحيحة، السلاسل | التاريخ والوقت، مُشفّرين بالمللي ثانية منذ بداية الحقبة |
| معرف الوقت | UUIDs | معرف فريد عالمي من النوع 1، قابل للفرز حسب الوقت المضمن |
| الدقيقة | الأعداد الصحيحة | عدد صحيح موقّع مكون من 8 بت |
| الصفوف (tuple) | مجموعة ثابتة من الحقول المكتوبة | |
| UUID | UUIDs | معرّف فريد عالمي قياسي (UUID) |
| VARCHAR | سلاسل | سلسلة مشفرة بنظام UTF-8، وهو اسم بديل للنص |
| فارينت | الأعداد الصحيحة | عدد صحيح الدقة التعسفية |
ثلاثة خيارات في تلك القائمة تسبب معظم أخطاء النمذجة، لذا يجدر ذكرها صراحةً.
- نص مقابل varchar. هما من نفس النوع. كلا الاسمين صحيح، وخلطهما لا يضيف أي قيمة.
- الطابع الزمني مقابل المعرف الفريد للوقت. استخدم الطابع الزمني لتسجيل وقت حدوث شيء ما. استخدم معرّف الوقت الفريد (TimeUUID) كعمود تجميع عندما تشترك العديد من الأحداث في جزء من الثانية، لأن معرّف الوقت الفريد يضمن التفرد مع الحفاظ على الترتيب حسب الوقت.
- الفرق بين الفاصلة العشرية والفاصلة المزدوجة. القيم النقدية تُكتب بالأرقام العشرية. أما الأرقام المزدوجة فتُدخل خطأ تقريب ثنائي يتراكم عبر عمليات التجميع.
A مواجهة يحمل العمود قيدًا خاصًا: قد يحتوي الجدول على أعمدة عداد أو أعمدة عادية، وليس كليهما، ولا يمكن إدراج صفوف العداد، بل زيادتها فقط.
Cassandra TTL (مدة البقاء) باستخدام انتهاء الصلاحية التلقائي للبيانات
Cassandra يوفر وظائف يمكن من خلالها انتهاء صلاحية البيانات تلقائيًا.
أثناء إدراج البيانات، يجب عليك تحديد قيمة "ttl" بالثواني. قيمة "ttl" هي الوقت الذي تبقى فيه القيمة للبيانات. وبعد مرور هذه المدة المحددة، ستتم إزالة البيانات تلقائيًا.
على سبيل المثال، حدد قيمة ttl 100 ثانية أثناء الإدراج. سيتم حذف البيانات تلقائيًا بعد 100 ثانية. عند انتهاء صلاحية البيانات، يتم وضع علامة على تلك البيانات منتهية الصلاحية بعلامة مميزة.
شاهد القبر موجود لفترة السماح. بعد انتهاء صلاحية البيانات، تتم إزالة البيانات تلقائيًا بعد عملية الضغط.
بناء الجملة
INSERT INTO KeyspaceName.TableName (ColumnNames) VALUES (ColumnValues) USING TTL TimeInSeconds;
مثال
فيما يلي اللقطة التي يتم فيها إدراج البيانات في جدول الطالب بقيمة ttl تبلغ 100 ثانية.
INSERT INTO University.Student (rollno, name, dept, semester) VALUES (3, 'Guru99', 'CS', 7) USING TTL 100;
فيما يلي اللقطة التي تنتهي فيها صلاحية البيانات تلقائيًا بعد 100 ثانية وتتم إزالة البيانات تلقائيًا.
التحقق من قيمة TTL وتغييرها في البيانات الموجودة
بمجرد أن تحمل القيمة قيمة TTL، تصبح ثلاث عمليات أخرى مفيدة، ولكل منها سلوك يفاجئ الوافدين الجدد.
يمكن قراءة العمر المتبقي لأي عمود غير مفتاح أساسي باستخدام وظيفة TTL.
SELECT name, TTL(name) FROM University.Student WHERE rollno = 3;
تعني النتيجة الفارغة أن العمود لم يتم تحديد تاريخ انتهاء صلاحيته. لا يمكن الاستعلام عن أعمدة المفتاح الأساسي بهذه الطريقة، لأن مدة الصلاحية (TTL) مرتبطة بالقيم وليس بالمفتاح.
يمكن إعطاء قيمة موجودة قيمة TTL جديدة عن طريق تحديثها، مما يؤدي إلى إعادة ضبط العد التنازلي من تلك اللحظة.
UPDATE University.Student USING TTL 600 SET name = 'Guru99' WHERE rollno = 3;
يؤدي استخدام قيمة افتراضية على مستوى الجدول إلى تجنب تكرار الشرط في كل عبارة.
ALTER TABLE University.Student WITH default_time_to_live = 86400;
يترتب على ذلك نتيجتان. أولاً، يُطبق وقت انتهاء الصلاحية (TTL) على كل عمود، وليس على كل صف، لذا فإن تحديث عمود واحد بدون وقت انتهاء صلاحية يُبقي هذا العمود مُهملاً بعد انتهاء صلاحية باقي الصفوف، مما يُنتج صفًا غير مكتمل البيانات. يُجنّب ضبط وقت انتهاء الصلاحية على عملية الإدراج بأكملها هذه المشكلة. ثانيًا، كل انتهاء صلاحية يُنشئ علامة حذف، لذا فإن جدولًا تنتهي فيه صلاحية ملايين الصفوف معًا سيُبطئ عمليات القراءة حتى يتم ضغطها. يُتيح استخدام استراتيجية ضغط نافذة الوقت (TimeWindowCompactionStrategy) لمثل هذه الجداول حذف جداول SSTables بأكملها دفعة واحدة بدلاً من ضغطها صفًا صفًا.
يمكن أيضًا تطبيق خاصية انتهاء الصلاحية على العناصر الموجودة داخل مجموعة، وهو ما يتم تناوله في Cassandra مجموعات البرنامج التعليمي.


