ما الفرق بين Cassandra وMongoDB؟

Apache Cassandra وMongoDB هما قاعدتا بيانات ضمن NoSQL تخزنان البيانات بتنسيق غير جدولي. Cassandra هي قاعدة بيانات قديمة ضمن NoSQL ذات تصميم يجمع بين المخزن الجدولي ومخزن القيمة الرئيسية. وهي مصممة لتخزين البيانات للتطبيقات التي تتطلب أداءً سريعًا في القراءة والكتابة. بينما تعتبر MongoDB إحدى قواعد بيانات المستند المصممة ليتم استخدامها لأغراض عامة. وتحتوي على نموذج بيانات مرن يسمح لك بتخزين البيانات غير منظمة البنية بتنسيق JSON محسّن يسمى Binary JSON أو BSON. تدعم قاعدة بيانات MongoDB الفهرسة بصورة كاملة وتوفر النسخ المتماثل مع واجهات برمجة التطبيقات الثرية والذكية.

الاطّلاع على Apache Cassandra »

الاطّلاع على MongoDB »

ما أوجه التشابه بين Cassandra وMongoDB؟

تنتمي كلٌ من Apache Cassandra وMongoDB إلى مجموعة قواعد بيانات NoSQL. يمكن لقواعد بيانات NoSQL تخزين البيانات منظمة البنية، وغير منظمة البنية، وشبه منظمة البنية دون مخطط قاعدة بيانات.

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

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

طوّر Facebook قاعدة البيانات Cassandra ثم أصدرها بوصفها مشروعًا مفتوح المصدر مع Apache. طورت مجموعة صغيرة من المطورين الذين ينتمون إلى شركة MongoDB, Inc قاعدة البيانات MongoDB. تتوفر جميع إصدارات MongoDB التي تم إصدارها قبل 16 أكتوبر 2018 بموجب ترخيص GNU Affero العام.

اطّلع على NoSQL »

اطّلع على المصدر المفتوح »

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

على الرغم من أن كلًا من MongoDB وApache Cassandra تندرجان ضمن قواعد بيانات NoSQL، إلا إنهما يخزنان البيانات ويديرانها بصورة مختلفة.

Cassandra

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

يمكنك تجميع الأعمدة في مجموعات حسب نوع البيانات أو الاستخدام المستخدم في كلٍ منها. هناك مفتاح رئيسي لكل صف يمكنك استخدامه لقراءة البيانات من Cassandra بسرعة.

يمكن تصور بنية جدول Apache Cassandra في المثال التالي.

معرف العميل 1

العمود - الاسم

العمود - البلد

 
 

القيمة - جون دو

القيمة - الولايات المتحدة

 
معرف العميل 2

العمود - الاسم 

العمود - العُمر

العمود - البريد الإلكتروني

 

القيمة - جين دو

القيمة - 35

القيمة - jane_doe@example.com

MongoDB

في المقابل، تخزّن MongoDB البيانات دون مخطط، باستخدام تنسيق Binary JSON (BSON) المحسّن. كما يمكنها تخزين العديد من أنواع البيانات في مستند واحد، مثل الكائنات ذات تنسيق JSON، ثم إجراء تسلسل لها بتنسيق BSON.

تنظم MongoDB المستندات في مجموعات يمكن أن يحتوي كل منها على البيانات في بنيات مختلفة. يتميز نموذج البيانات الخاص بها بمرونته، ويمكنه معالجة كميات كبيرة من البيانات غير منظمة البنية.

فيما يلي مثال لبيانات العميل في MongoDB.

العميل:[

{

  معرف العميل: "1"،

  الاسم: "جون دو"،

  البلد: "الولايات المتحدة"

},

{

  معرف العميل: "2"،

  العمر: "35"

  البريد الإلكتروني: "jane_doe@example.com"

}]

الاختلافات البنيوية: المقارنة بين Cassandra و MongoDB

نظرًا للاختلافات في نماذج البيانات الخاصة بهما، تعمل Cassandra وMongoDB على تنفيذ العديد من ميزات قاعدة البيانات بصورة مختلفة.

وحدة التخزين الأساسية

في Cassandra، تُعد جداول السلاسل المصنفة (SSTables) وحدة التخزين الأساسية المستخدمة للاحتفاظ بالبيانات على القرص. SSTable هو ملف يحتوي على مجموعة مصنفة من أزواج القيم الرئيسية لعائلة أعمدة معينة (جدول) والتقسيم. SSTables غير قابلة للتغيير، ما يعني أنه بمجرد كتابتها، لا يمكن تعديلها. 

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

لغة الاستعلام

لغة الاستعلام هي العبارات التي تستخدمها لإدراج البيانات واستردادها من قاعدة البيانات.

لغة استعلام Cassandra‏ (CQL) هي لغة الاستعلام التي تستخدمها على Cassandra. على الرغم من أنها تحتوي على بنية وهيكل مماثلين للغة SQL، فقد طور Apache لغة CQL للعمل مع نموذج بيانات عائلة الأعمدة.

من ناحية أخرى، تستخدم MongoDB لغة استعلام MongoDB (MQL) التي تحتوي على أوامر مشابهة مثل Node.js. تدعم MQL عمليات الإنشاء، والقراءة، والتحديث، والحذف (CRUD). يمكنك كتابة أوامر MQL على غلاف MongoDB.

الفهرسة

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

تدعم Cassandra نوعين من الفهارس:

  • الفهارس الثانوية على الأعمدة الفردية
  • الفهارس الثانوية المرفقة بجداول سلاسل مصنفة (SASI) على أعمدة متعددة

تعمل فهارس SASI على تخزين بيانات الفهرس مباشرةً في SSTables. وتدعم الاستعلامات المعقدة مثل النطاق، والبادئة والبحث بالنص الكامل في الأعمدة التي تحتوي على أعداد كبيرة من القيم الفريدة.

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

  • فهرسًا جغرافيًا مساحيًا متخصصًا للبيانات الموزعة جغرافيًا
  • فهرس البحث بالنص للأحجام الكبيرة من البيانات النصية
  • فهارس مجزأة ومجمعة للبيانات الرقمية

التزامن

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

تحقق Cassandra التزامن من خلال اتساق القرص الدوار والدقة على مستوى الصف. يمكن لمستخدم واحد فقط العمل على صف واحد في كل مرة.

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

في المقابل، تدعم MongoDB آليات التحكم في التزامن متعدد الإصدارات (MVCC). يسمح MVCC بوجود إصدارات متعددة من مستند البيانات نفسه في وقتٍ واحد. يحتوي كل مستند على معرف مراجعة فريد يتزايد في كل تحديث. يوفر القفل على مستوى المستند وMVCC إستراتيجية التزامن الأكثر قوة.

التوافر

يعني التوفر أنك تضمن عدم تعطل البيانات، حتى في أثناء انقطاع الخادم. تضمن كل من Cassandra وMongoDB التوفر من خلال تكرار البيانات عبر عقد خادم متعددة.

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

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

قابلية التوسع

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

تستخدم Cassandra خوارزمية تجزئة موزعة تسمى التجزئة المتسقة لتحديد العقدة المسؤولة عن قيمة بيانات معينة. كما تدعم Cassandra أيضًا العقد الافتراضية (vnodes)، والتي تسمح للعقدة المادية الواحدة بالحصول على نطاقات متعددة من البيانات.

بينما تستخدم MongoDB مفاتيح التقسيم لتحديد مكان قيمة البيانات. يمكن لمسؤولي قاعدة البيانات تحديد مفاتيح التقسيم لتقسيم البيانات. يمكنك تقسيم البيانات حسب بعض العوامل؛ مثل: الموقع الجغرافي، أو الترتيب الأبجدي، أو أي نظام آخر أكثر كفاءة لمجموعة بياناتك.

مقارنة بين حالات استخدام Cassandra و MongoDB

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

فيما يلي بعض العوامل التي تجب مراعاتها عند الاختيار بين الأمرين.

تنسيق البيانات

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

إذا كانت البيانات أكثر ديناميكية وغير متسقة البنية، فإن MongoDB تعمل على نحو أفضل.

التوفر

تتضمن MongoDB عقدة رئيسية، ومن ثمّ سلسلة من النسخ المتماثلة. في حال تعطل العقدة الرئيسية، تستغرق MongoDB بضع دقائق لاختيار عقدة متماثلة لاستبدالها. قد يتسبب هذا في التعطل بصورة طفيفة.

تستخدم Cassandra نظام عقد موزعًا يتضمن العديد من العقد الرئيسية؛ ما يسمح بتوفر وقت التشغيل بنسبة 100%. 

قابلية التوسع

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

قد ينخفض أداء Cassandra قليلًا على نطاقٍ واسع، حسب قيم البيانات.

لغة الاستعلام

تعد كلٌ من لغة استعلام Cassandra (CQL) ولغة استعلام MongoDB (MQL) من لغات الاستعلام الفعالة للغاية. ومع ذلك، فإن لغة CQL تشبه إلى حد كبير لغة SQL، ما يسمح لك باستخدام CQL بسهولة إذا كنت بالفعل تجيد استخدام SQL.

تتضمن لغة MQL عمليات تنفيذ وصياغة مختلفة، وقد يكون لها منحنى تعليمي أكثر حدة.

دعم لغات البرمجة

تدعم MongoDB اثنتي عشرة لغة برمجة: C، وC++، وC#، وGo، وJava، وNode.js، وPHP، وPython، وRuby، وRust، وScala، وSwift.

بينما تدعم Cassandra عددًا أقل من اللغات، مثل Java، وJavaScript، وPerl، وRuby، وScala، وC#، وErlang، وPHP، وPython، وما إلى ذلك.

ملخص الاختلافات: Cassandra مقابل MongoDB

 

Apache Cassandra

MongoDB

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

تستخدم Cassandra نموذج بيانات يحتوي على أعمدة عريضة يرتبط ارتباطًا وثيقًا بقواعد البيانات العلائقية. 

يتحرك MongoDB بعيدًا تمامًا عن النموذج العلائقي من خلال تخزين البيانات في صورة مستندات.

وحدة تخزين أساسية

جداول سلاسل مصنفة.

مستندات JSON متسلسلة.

الفهرسة

تدعم Cassandra الفهارس الثانوية وSASI للفهرسة حسب العمود أو الأعمدة.

يعمل MongoDB على الفهرسة على مستوى المجموعة ومستوى الحقل ويقدم خيارات فهرسة متعددة.

لغة الاستعلام

تستخدم Cassandra لغة CQL.

تستخدم MongoDB لغة MQL.

التزامن

تحقق Cassandra التزامن مع الدقة على مستوى الصف واتساق القرص الدوار. 

تستخدم MongoDB‏ MVCC والقفل على مستوى المستند لضمان التزامن. 

التوفر

تحتوي Cassandra على العديد من العقد الرئيسية، وتقسيم العقد، والنسخ المتماثل للمفاتيح لتوفير درجة عالية من التوفر.

تستخدم MongoDB عقدة رئيسية واحدة وعقد متماثلة متعددة. إلى جانب التجزئة، توفر MongoDB درجة عالية من التوفر وقابلية التوسع. 

التقسيم

خوارزمية تجزئة متسقة، تحكم أقل للمستخدمين.

يحدد المستخدمون مفاتيح التجزئة ويتمتعون بمزيد من التحكم في التقسيم.

كيف تدعم AWS متطلبات Cassandra وMongoDB الخاصة بك؟

تقدم خدمات Amazon Web Services (AWS) خدمتين تدعمان متطلبات Apache Cassandra وMongoDB الشائعة.

Amazon Keyspaces (for Apache Cassandra) هي قاعدة بيانات مُدارة وعالية التوفر تتيح لك نقل أعباء عمل Cassandra لديك إلى السحابة. Amazon Keyspaces هي خدمة بلا خادم؛ لذا فأنت تدفع مقابل الموارد التي تستخدمها فقط، ويمكن للخدمة تحجيم الجداول بتوسيعها أو تقليصها تلقائيًا استجابةً لحركة بيانات التطبيق. يمكنك إنشاء تطبيقات تستجيب إلى آلاف الطلبات في الثانية الواحدة مع سعة إنتاج وتخزين غير محدودة فعليًا.

Amazon DocumentDB (بالتوافق مع MongoDB) عبارة عن قاعدة بيانات مستند أصلية ومُدارة بالكامل بتنسيق JSON. وهي تسهّل تشغيل أعباء عمل المستندات المهمة بأي حجم تقريبًا دون إدارة البنية التحتية، بتكلفة معقولة. تُبسّط Amazon DocumentDB بنيتك من خلال توفير أفضل ممارسات الأمان المُضمّنة، والنُسخ الاحتياطية المستمرة، وعمليات التكامل الأصلية مع خدمات AWS الأخرى.

ابدأ في استخدام خدمات قاعدة بيانات Apache Cassandra وMongoDB المُدارة على AWS اليوم من خلال إنشاء حساب AWS.