البرمجة

تحليل الهياكل: قواعد بيانات Cassandra vs. العلاقية

Title: مقارنة بين هيكل Cassandra وقواعد البيانات العلاقية

في الأيام القليلة الماضية، قرأت عن نوع تخزين الأعمدة الواسعة في قواعد البيانات NoSQL، وتحديدًا Apache Cassandra. ما فهمته هو أن Cassandra تتألف من:

تصنيف رئيسي (مثل قاعدة البيانات في قواعد البيانات العلاقية) ودعم العديد من أسر الأعمدة أو الجداول (نفسها كجدول في قواعد البيانات العلاقية) وصفوف غير محدودة.

من خلال وسوم Stackoverflow:

“تخزين الأعمدة الواسعة هو نوع من قواعد البيانات الرئيسية. إنه يستخدم الجداول والصفوف والأعمدة، ولكن على عكس قاعدة بيانات علاقية، يمكن أن تتغير أسماء وتنسيق الأعمدة من صف إلى صف في نفس الجدول.”

في Cassandra، يجب أن تحتوي جميع الصفوف (في جدول) على مفتاح صف ثم يمكن أن يحتوي كل مفتاح صف على عدة أعمدة. قرأت عن الاختلافات في التنفيذ وتخزين البيانات بين قاعدة البيانات العلاقية وNoSQL (Cassandra).

لكنني لا أفهم الفرق بين الهيكل:

تخيل سيناريو حيث يكون لدي جدول (أو عائلة أعمدة في Cassandra):

عند تنفيذ استعلام (CQL) مثل هذا:

sql
SELECT * FROM users;

يعطيني النتيجة كما يلي:

sql
lastname | age | city | email --------+-----+---------------+---------------------- Doe | 36 | Beverly Hills | janedoe@email.com Jones | 35 | Austin | bob@example.com Byrne | 24 | San Diego | robbyrne@email.com Smith | 46 | Sacramento | null Jones2 | null| Austin | bob@example.com

ثم أقوم بتنفيذ نفس السيناريو في قاعدة البيانات العلاقية (MsSql) باستعلام التالي:

css
SELECT * FROM [users];

والنتيجة هي:

sql
lastname | age | city | email --------+-----+---------------+---------------------- Doe | 36 | Beverly Hills | janedoe@email.com Jones | 35 | Austin | bob@example.com Byrne | 24 | San Diego | robbyrne@email.com Smith | 46 | Sacramento | NULL Jones2 | NULL| Austin | bob@example.com

أعلم أن Cassandra تدعم الأعمدة الديناميكية ويمكنني تحقيق ذلك باستخدام شيء مثل:

CQL
ALTER TABLE users ADD website varchar;

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

SQL
ALTER TABLE users ADD website varchar(MAX);

ما أراه هو أن نتيجة الاستعلام الأول والثاني هي نفسها. في Cassandra، يتم تقديم مفتاح الصف (lastname) ككائن مستقل ولكنه نفسه كحقل فريد (مثل الرقم التسلسلي أو نص) في MSSQL (وجميع قواعد البيانات العلاقية)، وأرى أن نوع العمود في Cassandra ثابت (في مثالي varchar) على عكس ما يوصف في وسم Stackoverflow.

لذلك أسئلتي هي:

  1. هل هناك أي سوء فهم في تصوّري حول Cassandra؟!
  2. إذا كانت النتيجة هي نفسها، فما هو الفارق بين الهيكلين؟!
  3. هل هناك سيناريوهات خاصة (مثل JSON) لا يمكن تنفيذها في قواعد البيانات العلاقية ولكن تدعمها Cassandra؟ (على سبيل المثال، أعلم أن الأعمدة المتداخلة لا تدعم في Cassandra.)

شكرًا لقراءتك.

المزيد من المعلومات

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

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

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

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

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

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

باختصار، رغم أن النتيجة قد تظهر متشابهة في بعض الاستعلامات، إلا أن Cassandra تتفرد بالعديد من الخصائص التي تجعلها ملائمة لسيناريوهات خاصة، خاصة تلك التي تتطلب توزيع البيانات بشكل فعّال وتخزين هيكليات متقدمة.

زر الذهاب إلى الأعلى