Cassandra مدة البقاء & Cassandra أنواع بيانات CQL (مثال)

⚡ ملخص ذكي

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

  • 🔤 عائلات الأنواع: يقوم CQL بتصنيف الأنواع إلى فئات نصية ورقمية وتاريخ ووقت ومعرفات ومجموعات.
  • 🔢 الاختيار الرقمي: تغطي أنواع البيانات من tinyint إلى varint جميع أحجام الأعداد الصحيحة، بينما يحافظ نوع البيانات decimal على الدقة التامة في التعامل مع الأموال.
  • 🆔 UUID مقابل TimeUUID: يقوم timeuuid بتضمين الطابع الزمني ويقوم بالفرز الزمني، لذا فهو مناسب لأعمدة التجميع المرتبة زمنيًا.
  • ⏳ أساسيات TTL: تؤدي قيمة ttl بالثواني التي يتم تحديدها عند وقت الإدخال إلى حذف البيانات تلقائيًا بمجرد انقضاء هذه المدة.
  • 🪦 سلوك انتهاء الصلاحية: تصبح البيانات المنتهية الصلاحية بمثابة شاهد قبر، ولا تتم إزالتها فعلياً إلا بعد الضغط.
  • 🧊 الأنواع المجمدة: يؤدي وضع علامة "مجمد" على مجموعة أو صف إلى تخزينها كقيمة واحدة غير قابلة للتغيير يجب استبدالها بالكامل.

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 ثانية.

Cassandra TTL باستخدام انتهاء الصلاحية التلقائي للبيانات

INSERT INTO University.Student (rollno, name, dept, semester)
VALUES (3, 'Guru99', 'CS', 7) USING TTL 100;

فيما يلي اللقطة التي تنتهي فيها صلاحية البيانات تلقائيًا بعد 100 ثانية وتتم إزالة البيانات تلقائيًا.

Cassandra TTL باستخدام انتهاء الصلاحية التلقائي للبيانات

التحقق من قيمة 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 مجموعات البرنامج التعليمي.

الأسئلة الشائعة

لا. يتم ربط مدة صلاحية البيانات (TTL) بالقيم غير الرئيسية. يختفي الصف فقط بعد انتهاء صلاحية جميع الأعمدة غير الرئيسية، لذا فإن تحديد مدة الصلاحية على عملية الإدراج بأكملها هو الأسلوب الموثوق.

الحد الأقصى هو 630,720,000 ثانية، أي ما يعادل عشرين عامًا. يتم رفض القيم التي تتجاوز هذا الحد، لذا يجب معالجة الاحتفاظ بالبيانات لفترات أطول من خلال عملية تنظيف على مستوى التطبيق.

قم بتجميدها عندما تُكتب القيمة بأكملها معًا دائمًا، أو عندما تُشكّل جزءًا من مفتاح أساسي. لا يمكن تحديث عناصر المجموعة المُجمدة بشكل فردي.

عادةً ما تكون الإجابة بنعم في الحالات الواضحة، ولكن يُنصح عادةً باستخدام القيمة المضاعفة للمال وUUID حيث يكون TimeUUID مطلوبًا للترتيب. تحقق من دقة الأرقام وخيارات ترتيب الوقت يدويًا.

يمكنه تحويل سياسة الاحتفاظ بالبيانات إلى قيم TTL واقتراح استراتيجية لضغطها. تأكد أولاً من فترة الاحتفاظ القانونية، حيث لا يمكن استعادة البيانات منتهية الصلاحية.

تلخيص هذه التدوينة بـ: