Cassandra نموذج البيانات مع مثال قاعدة بيانات بسيطة

⚡ ملخص ذكي

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

  • ✍️ الكتابة رخيصة: Cassandra تم تحسينها لزيادة معدل نقل البيانات، لذا فإن تكرار البيانات عبر الجداول هو الطريقة المقبولة لجعل عمليات القراءة سريعة.
  • 📋 استفسر أولاً: قم بإدراج الاستعلامات التي يجب على التطبيق الإجابة عليها، ثم أنشئ جدولًا واحدًا لكل استعلام بدلاً من جدول واحد لكل كيان.
  • 🔑 مفتاح التقسيم: يحدد العنصر الأول من المفتاح الأساسي العقدة التي تخزن الصف، وبالتالي مدى انتشار البيانات بشكل متساوٍ.
  • 🧩 Clusterأعمدة الإدخال: تقوم عناصر المفتاح الأساسي المتبقية بفرز الصفوف داخل القسم وتمكين استعلامات النطاق.
  • 📏 حجم القسم: يؤدي قلة عدد الأقسام إلى ظهور نقاط ساخنة وصفوف كبيرة الحجم؛ بينما يؤدي كثرتها إلى إجبار عملية القراءة على زيارة العديد من العقد.
  • 🔗 العلاقات: يحتاج نظام واحد إلى واحد إلى جدول واحد، ويحتاج نظام واحد إلى متعدد إلى مفتاح مركب، ويحتاج نظام متعدد إلى متعدد إلى جدول واحد لكل اتجاه استعلام.

Cassandra مثال نموذج البيانات

بالرغم ان Cassandra تشبه لغة الاستعلام SQL اللغة، وأساليب نمذجة البيانات الخاصة بهم مختلفة تماما.

In Cassandraيمكن أن يؤدي نموذج البيانات السيئ إلى تدهور الأداء، وخاصةً عندما يحاول المستخدمون تنفيذ مفاهيم RDBMS على Cassandra. من الأفضل أن تضع في اعتبارك بعض القواعد المفصلة أدناه.

Cassandra قواعد نموذج البيانات

In Cassandra، يكتب ليست باهظة الثمن. Cassandra لا يدعم عمليات الانضمام، أو التجميع حسب، أو عبارة OR، أو التجميعات، وما إلى ذلك. لذلك يتعين عليك تخزين بياناتك بطريقة تجعلها قابلة للاسترجاع بالكامل. لذلك يجب أن توضع هذه القواعد في الاعتبار أثناء نمذجة البيانات Cassandra.

تعظيم عدد الكتابات

In Cassandra، الكتابة رخيصة جدًا. Cassandra تم تحسين هذه الخاصية لتحقيق أداء كتابة عالٍ. لذا، حاول زيادة عمليات الكتابة إلى أقصى حد لتحسين أداء القراءة وتوافر البيانات. هناك توازن بين كتابة البيانات وقراءتها. لذلك، حسّن أداء قراءة البيانات عن طريق زيادة عدد عمليات الكتابة إلى أقصى حد.

تعظيم تكرار البيانات

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

Cassandra أهداف نمذجة البيانات

يجب أن يكون لديك الأهداف التالية أثناء نمذجة البيانات في Cassandra:

نشر البيانات بالتساوي حول Cluster

تريد كمية متساوية من البيانات على كل عقدة Cassandra Clusterيتم توزيع البيانات على مختلف العُقد بناءً على مفاتيح التقسيم، وهي الجزء الأول من المفتاح الأساسي. لذا، حاول اختيار عمود ذي عدد كبير من القيم المميزة كمفتاح تقسيم لتوزيع البيانات بالتساوي في جميع أنحاء المجموعة.

تقليل عدد الأقسام المقروءة أثناء الاستعلام عن البيانات

القسم عبارة عن مجموعة من السجلات التي لها نفس مفتاح القسم. عند إصدار استعلام القراءة، فإنه يجمع البيانات من عقد مختلفة من أقسام مختلفة.

إذا كان هناك العديد من الأقسام، فيجب زيارة جميع هذه الأقسام لتجميع بيانات الاستعلام.

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

لذا حاول اختيار عدد متوازن من الأقسام.

مفتاح أساسي جيد في Cassandra

يتلخص كلا الهدفين المذكورين أعلاه في قرار واحد، لذا فإن المخططين أدناه يوضحان نفس الجدول بمفتاح ضعيف ثم بمفتاح سليم.

لنأخذ مثالاً ونجد أي مفتاح أساسي جيد.

هنا هو الجدول MusicPlaylist.

CREATE TABLE MusicPlaylist (
    SongId int,
    SongName text,
    Year int,
    Singer text,
    PRIMARY KEY (SongId, SongName)
);

في المثال أعلاه، جدول MusicPlaylist،

  • SongId هو مفتاح التقسيم، و
  • SongName هو عمود التجميع
  • سيتم تجميع البيانات بناءً على اسم الأغنية. سيتم إنشاء قسم واحد فقط لكل معرف أغنية، ولأن لكل أغنية معرفًا مميزًا، فإن كل قسم يحتوي على صف واحد.

سيكون استرداد البيانات بطيئًا بواسطة نموذج البيانات هذا بسبب المفتاح الأساسي السيئ.

هنا قائمة تشغيل موسيقى أخرى.

CREATE TABLE MusicPlaylist (
    SongId int,
    SongName text,
    Year int,
    Singer text,
    PRIMARY KEY ((SongId, Year), SongName)
);

في المثال أعلاه، جدول MusicPlaylist،

  • SongId و Year هما مفتاح التقسيم، و
  • SongName هو عمود التجميع.
  • سيتم تجميع البيانات على أساس SongName. في هذا الجدول، سيتم إنشاء قسم جديد كل عام. ستكون جميع أغاني العام على نفس العقدة. سيكون هذا المفتاح الأساسي مفيدًا جدًا للبيانات.

سيكون استرجاع البيانات لدينا سريعًا من خلال نموذج البيانات هذا.

نموذج بياناتك في Cassandra

ينبغي أن تؤخذ الأمور التالية في الاعتبار أثناء نمذجة استعلاماتك:

حدد الاستعلامات التي تريد دعمها

أولاً، حدد الاستعلامات التي تريدها.

على سبيل المثال، هل تحتاج؟

  • ينضم
  • مجموعة من
  • التصفية على أي عمود وما إلى ذلك.

إنشاء جدول وفقا لاستفساراتك

إنشاء جدول وفقا لاستفساراتك. قم بإنشاء جدول يلبي استفساراتك. حاول إنشاء جدول بحيث يلزم قراءة أقل عدد ممكن من الأقسام.

تُطبّق الأقسام الثلاثة التالية هذا المبدأ على أنواع العلاقات الثلاثة الموجودة في كل مخطط تقريبًا.

التعامل مع العلاقة الفردية في Cassandra

العلاقة واحد لواحد تعني أن هناك جدولين لهما تطابق واحد لواحد. على سبيل المثال، يمكن للطالب تسجيل مقرر دراسي واحد فقط، وأريد البحث عن الطالب في أي مقرر تم تسجيل طالب معين فيه.

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

علاقة واحد لواحد في Cassandra
علاقة واحد لواحد في Cassandra

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

CREATE TABLE Student_Course (
    Student_rollno int PRIMARY KEY,
    Student_name text,
    Course_name text
);

لأن Student_rollno هو مفتاح التقسيم، فإن البحث بواسطة رقم القيد يقرأ قسمًا واحدًا بالضبط.

التعامل مع علاقة واحدة لكثيرة في Cassandra

العلاقات من واحد إلى العديد تعني وجود واحد إلى العديد من المراسلات بين جدولين.

على سبيل المثال، يمكن دراسة الدورة من قبل العديد من الطلاب. أريد البحث عن جميع الطلاب الذين يدرسون مقررًا معينًا.

ومن خلال الاستعلام عن اسم المقرر، سيكون لدي العديد من أسماء الطلاب الذين سيدرسون مقررًا معينًا.

علاقة واحدة إلى متعددة في Cassandra
علاقة واحدة إلى متعددة في Cassandra

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

CREATE TABLE Student_Course (
    Course_name text,
    Student_rollno int,
    Student_name text,
    PRIMARY KEY (Course_name, Student_rollno)
);

يمكنني استرجاع جميع الطلاب لدورة معينة عن طريق الاستعلام التالي.

SELECT * FROM Student_Course WHERE Course_name = 'Course Name';

التعامل مع العديد من العلاقات في Cassandra

تعني العلاقات من كثير إلى كثير وجود العديد من المراسلات بين جدولين.

على سبيل المثال، يمكن دراسة مقرر دراسي من قبل العديد من الطلاب، ويمكن للطالب أيضًا دراسة العديد من المقررات.

العديد من العلاقات في Cassandra
العديد من العلاقات في Cassandra

أريد البحث عن جميع الطلاب الذين يدرسون مقررًا معينًا. وأريد أيضًا البحث في جميع المقررات الدراسية التي يدرسها طالب معين.

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

أولاً، سأقوم بإنشاء جدول يمكنك من خلاله العثور على الدورات التدريبية لطالب معين.

CREATE TABLE Student_Course (
    Student_rollno int,
    Course_name text,
    Student_name text,
    PRIMARY KEY (Student_rollno, Course_name)
);

أستطيع العثور على جميع الدورات التي يدرسها طالب معين عن طريق الاستعلام التالي.

SELECT * FROM Student_Course WHERE Student_rollno = 101;

ثانيًا، سأقوم بإنشاء جدول يمكنك من خلاله معرفة عدد الطلاب الذين يدرسون مقررًا معينًا.

CREATE TABLE Course_Student (
    Course_name text,
    Student_rollno int,
    Student_name text,
    PRIMARY KEY (Course_name, Student_rollno)
);

يمكنني العثور على طالب في دورة معينة عن طريق الاستعلام التالي.

SELECT * FROM Course_Student WHERE Course_name = 'Cassandra';

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

مشترك Cassandra أخطاء في نمذجة البيانات

معظم المخططات الضعيفة تكرر نفس الأخطاء القليلة، وكل منها tracيعود الأمر إلى عادة موروثة من التصميم العلائقي.

  • أقسام غير محدودة: يؤدي اختيار مفتاح تقسيم مثل اسم الدولة إلى وضع ملايين الصفوف في قسم واحد. أضف فترة زمنية، على سبيل المثال (الدولة، الشهر)، للحفاظ على حجم الأقسام ضمن نطاق معقول.
  • مفاتيح ذات عدد عناصر منخفض للغاية: مفتاح التقسيم الذي يحتوي على عدد قليل من القيم الممكنة فقط، مثل علامة الحالة، يركز كل حركة المرور على عدد قليل من العقد ويترك الباقي خاملاً.
  • استخدام خاصية ALLOW FILTERING لجعل الاستعلام يعمل: يقوم بفحص كل قسم ويخفي مشكلة في النمذجة. إذا احتاج استعلام ما إلى جدول آخر، فإن المخطط يحتاج إلى جدول آخر.
  • نمذجة الكيانات بدلاً من الاستعلامات: إن إنشاء جدول للطلاب وجدول للدورات، ثم محاولة دمجهما في التطبيق، يُفقد التصميم الغرض منه.
  • عمليات حذف واستبدال متكررة: كل عملية حذف تكتب علامة حذف يجب قراءتها وتجاوزها حتى يقوم الضغط بإزالتها، مما يبطئ عمليات القراءة على الأقسام الساخنة.

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

الفرق بين RDBMS و Cassandra نمذجة البيانات

RDBMS Cassandra
يخزن البيانات في شكل طبيعي يخزن البيانات في شكل غير طبيعي
نظام إدارة قواعد البيانات القديم؛ البيانات المنظمة مخزن صفوف عريض، ديناميكي؛ بيانات منظمة وغير منظمة
تم تصميم المخطط حول الكيانات وعلاقاتها تم تصميم المخطط حول الاستعلامات التي سينفذها التطبيق
يدعم النظام عمليات الربط، والتجميع حسب، وعبارات WHERE العشوائية. ممنوع الربط أو التصفية العشوائية؛ يجب أن تتطابق الاستعلامات مع المفتاح الأساسي
عادةً ما يخدم جدول واحد العديد من الاستعلامات المختلفة عادةً ما يخدم كل جدول استعلامًا واحدًا، لذلك يتم تكرار البيانات عبر الجداول.
يتم ضمان سلامة البيانات المرجعية بواسطة المفاتيح الخارجية لا توجد مفاتيح خارجية؛ تقع مسؤولية التناسق بين الجداول المكررة على عاتق التطبيق.

تُطبَّق قرارات المخطط هذه عملياً في Cassandra جدول و مفتاح دروس.

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

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

يحدد مفتاح التقسيم العقدة التي تخزن الصف. Clusterتحدد الأعمدة ترتيب فرز الصفوف داخل هذا القسم وتسمح باستعلامات النطاق مثل نطاق التاريخ.

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

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

بناءً على عدد الأعمدة وعدد الصفوف المتوقع، يمكن للذكاء الاصطناعي تحديد المفاتيح التي يُحتمل أن تُنشئ نقاطًا ساخنة أو أقسامًا غير محدودة. تأكد من التحذير باستخدام أداة nodetool tablehistograms بعد تحميل البيانات الفعلية.

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