Cassandra المجموعات: تعيين وقائمة وخريطة في CQL مع مثال

⚡ ملخص ذكي

Cassandra تُخزّن المجموعات عدة قيم داخل عمود واحد باستخدام أنواع البيانات set وlist وmap. تشرح هذه الصفحة كل نوع، وصيغة CQL لإنشائها وتعبئتها، وكيفية تحديث العناصر، وحدود الحجم التي تحدد متى يكون استخدام المجموعة غير مناسب.

  • 📦 ثلاثة أنواع: تحتوي المجموعة على قيم فريدة غير مرتبة، وتحافظ القائمة على ترتيب الإدخال، وتخزن الخريطة أزواج المفاتيح والقيم.
  • 🔤 ضبط السلوك: يتم تخزين العناصر مرتبة ويتم التخلص من العناصر المكررة تلقائيًا.
  • 🔢 تحذير بشأن القائمة: يتم الحفاظ على الترتيب، لكن عمليات الإضافة والفهرسة تتطلب القراءة قبل الكتابة.
  • 🗺️ استخدام الخريطة: تُناسب الخريطة السمات التي لا تكون مفاتيحها معروفة عند تصميم المخطط.
  • 📏 حجم الحد: حافظ على صغر حجم المجموعات؛ تتم قراءة المجموعة بأكملها حتى عند الحاجة إلى عنصر واحد.
  • 🧊 خيار مجمد: يتم تخزين المجموعة المجمدة كقيمة واحدة ويجب استبدالها بالكامل.

Cassandra خريطة قائمة مجموعات المجموعات

ما هي Cassandra مجموعات؟

Cassandra تعتبر المجموعات طريقة جيدة للتعامل مع المهام. يمكن تخزين عناصر متعددة في مجموعات. هناك قيود في Cassandra مجموعات.

  • لا يمكن لعمود المجموعة تخزين أكثر من 64 كيلوبايت من البيانات في قيمة واحدة.
  • حافظ على حجم المجموعة صغيرًا لتجنب عبء الاستعلام عن المجموعة، لأنه تتم قراءة المجموعة بأكملها حتى عندما تكون هناك حاجة إلى عنصر واحد فقط.
  • تخزين أكثر من 64 كيلوبايت يعني أنه لا يمكن الاستعلام إلا عن أول 64 كيلوبايت، مما يؤدي إلى فقدان البيانات.
  • تقتصر المجموعة غير المجمدة على ما يقرب من 65,535 عنصرًا، ويتم قراءة كل عنصر معًا كوحدة واحدة.

تشير هذه القيود إلى قاعدة واحدة: تُناسب المجموعات عددًا محدودًا من السمات المرتبطة بصف، وليس قائمة مفتوحة تتوسع مع الاستخدام. أي شيء يستمر في التوسع يجب أن يُوضع في أعمدة التجميع في جدول خاص به.

انواع من Cassandra المجموعات

هناك ثلاثة أنواع رئيسية من المجموعات التي Cassandra يدعم:

  1. بكج
  2. قائمة
  3. خريطة

Cassandra مجموعة المجموعة

تقوم المجموعة بتخزين مجموعة من العناصر التي تقوم بإرجاع العناصر المصنفة عند الاستعلام.

بناء الجملة

هذا هو بناء جملة مجموعة المجموعات التي تخزن عناوين البريد الإلكتروني المتعددة للمعلم.

CREATE TABLE University.Teacher (
    id int,
    Name text,
    Email set<text>,
    PRIMARY KEY (id)
);

مثال

هذه هي الصورة حيث تم إنشاء الجدول "المعلم" مع عمود "البريد الإلكتروني" كمجموعة.

مثال Cassandra مجموعة المجموعة

فيما يلي اللقطة التي يتم فيها إدراج البيانات في المجموعة.

مثال Cassandra مجموعة المجموعة

INSERT INTO University.Teacher (id, Name, Email)
VALUES (1, 'Guru99', {'abc@gmail.com', 'xyz@hotmail.com'});

تتم إضافة العناصر الفردية أو إزالتها دون إعادة كتابة المجموعة بأكملها، وهي الميزة الرئيسية لترك المجموعة غير مجمدة.

UPDATE University.Teacher SET Email = Email + {'new@guru99.com'} WHERE id = 1;
UPDATE University.Teacher SET Email = Email - {'xyz@hotmail.com'} WHERE id = 1;

Cassandra مجموعة قائمة

عندما يكون ترتيب العناصر مهمًا، يتم استخدام القائمة.

مثال

فيما يلي لقطة شاشة توضح مكان إضافة عمود "الدورات" من نوع القائمة في جدول "المعلم".

مثال Cassandra مجموعة قائمة

ALTER TABLE University.Teacher ADD coursenames list<text>;

فيما يلي اللقطة التي يتم فيها إدراج البيانات في عمود "أسماء الدورات التدريبية".

مثال Cassandra مجموعة قائمة

INSERT INTO University.Teacher (id, Name, Email, coursenames)
VALUES (2, 'Hamilton', {'hamilton@hotmail.com'}, ['Data Science']);

هذه هي اللقطة التي توضح حالة قاعدة البيانات الحالية بعد الإدراج.

Cassandra مثال على مجموعة القائمة

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

UPDATE University.Teacher SET coursenames = coursenames + ['Machine Learning'] WHERE id = 2;
UPDATE University.Teacher SET coursenames = ['Statistics'] + coursenames WHERE id = 2;

Cassandra مجموعة الخرائط

الخريطة هي نوع مجموعة يُستخدم لتخزين أزواج القيمة الأساسية. وكما يوحي اسمها، فهي تربط شيئًا بآخر.

على سبيل المثال، إذا كنت تريد حفظ اسم المقرر الدراسي مع اسم المقرر الدراسي المطلوب مسبقًا، فيمكن استخدام مجموعة الخرائط.

مثال

فيما يلي اللقطة التي يتم فيها إنشاء نوع الخريطة لاسم الدورة التدريبية واسم الدورة التدريبية المطلوبة مسبقًا.

مثال Cassandra مجموعة الخرائط

CREATE TABLE University.Course (
    id int,
    prereq map<text, text>,
    PRIMARY KEY (id)
);

فيما يلي اللقطة التي يتم فيها إدراج البيانات في نوع مجموعة الخرائط.

مثال Cassandra مجموعة الخرائط

INSERT INTO University.Course (id, prereq)
VALUES (1, {'DataScience': 'Database', 'Neural Network': 'Artificial Intelligence'});

يتم تعيين أو إزالة إدخال واحد دون المساس ببقية الخريطة.

UPDATE University.Course SET prereq['Robotics'] = 'Linear Algebra' WHERE id = 1;
DELETE prereq['DataScience'] FROM University.Course WHERE id = 1;

المجموعة مقابل القائمة مقابل الخريطة: اختيار مجموعة

تبدو الأنواع الثلاثة قابلة للتبديل، لكنها تختلف في ضمانات الطلب وتكلفة التحديث.

البعد بكج قائمة خريطة
تنظيم مرتبة حسب القيمة تم الحفاظ على ترتيب الإدخال مرتبة حسب المفتاح
التكرارات غير مسموح مسموح به مفاتيح فريدة
تحديث التكلفة رخيص، لا يتطلب قراءة الإلحاق رخيص؛ الإضافة في البداية وتحديث الفهرس يتطلبان قراءة سعر المفتاح رخيص
أفضل ل الوسوم، عناوين البريد الإلكتروني، التصنيفات الفريدة الخطوات المرتبة التي تكون فيها التكرارات ذات مغزى سمات مُسماة بمفاتيح غير متوقعة

يُفضّل استخدام مجموعة على قائمة إلا إذا كان الترتيب مهمًا حقًا، لأن عمليات فهرسة القوائم تُنشئ علامات حذف وقد تُنتج نتائج غير متوقعة عند الكتابة المتزامنة. إضافة مجمد إلى أي من المخازن الثلاثة كقيمة واحدة غير قابلة للتغيير، مما يسمح للمجموعة بالظهور في مفتاح أساسي ولكنه يزيل التحديثات على مستوى العنصر.

CREATE TABLE University.Enrolment (
    id int,
    tags frozen<set<text>>,
    PRIMARY KEY (id, tags)
);

عندما يتجاوز عدد عناصر المجموعة بضع عشرات، قم بنمذجتها كجدول منفصل مع اعتبار العنصر عمودًا للتجميع، وذلك باتباع النهج المتبع في Cassandra قواعد نموذج البياناتيتطلب تصفية محتويات المجموعة وجود فهرس، وهو ما تم تناوله في إنشاء وحذف الفهرس البرنامج التعليمي.

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

نعم، بمجرد وجود فهرس. استخدم CONTAINS لقيم المجموعات والقوائم، وCONTAINS KEY لمفاتيح الخرائط، بعد إنشاء فهرس VALUES أو KEYS أو ENTRIES المطابق.

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

يؤدي تعيين مجموعة جديدة إلى حذف جميع العناصر الموجودة أولاً، مما يؤدي إلى كتابة علامة حذف نطاق. تتجنب إضافة العناصر الفردية وإزالتها هذا الأمر، وهو النمط المفضل.

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

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

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