التصنيفات
Uncategorized

MongoDB مقابل MySQL: دراسة مقارنة على قواعد البيانات


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

لنبداء اولا بتعريف كلا القاعدتين ونأخذ نظرة سريعة عنهما

اولاً الـ MongoDB
MongoDB هي واحدة من قواعد البيانات الأكثر شعبية من نوع قاعدة بيانات NoSQL. تم تطويرها من فكرة في عام 2007 وتم إصدار نسخته الأولى في عام 2010. تم تطويرها وصيانتها بواسطة شركة MongoDB.

تعتمد قاعدة البيانات هذه على نظام المفتاح-القيمة (key-value pairs ) لكل قيمة مفتاح اشبه بالمصفوفات الثنائية . يتم تخزين البيانات في وثائق في ملفات BSON والتي هي بالواقع نسخة معدلة قليلاً من ملفات JSON .

لهذا السبب ، يتم استخدامها بكثرة في المشاريع المبنية على Node.js. علاوة على ذلك ، من مميرات هذا النموذج ان الـ JSON تعمل على تسهيل تبادل البيانات بين تطبيقات الويب والخوادم بتنسيق قابل للقراءة من قبل الإنسان.

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

لا تعتمد MongoDB على بنية محددة كما في ال MySql لاجداول ولا بينة محددة مسبقا ولا نوع محدد من البيانات . يسمح هذا النموذج بتمثيل العلاقات الهرمية وتسهل القدرة على ادخال اي شكل من البيانات واي نوع دون قيود محددة مسبقاً.

بالإضافة إلى ذلك ، يسهل هذا النموذج عمليات مشاركة البيانات ونسخها ونقلها وتضمينها بقيود اقل بكثير من الـ MySql وشبيهاتها

ثانياً ما هو الـ MySql
MySQL هو نظام إدارة قواعد بيانات علائقية مفتوح المصدر RDBMS. تم بناؤه في الأصل بواسطة MySQL AB رغم أنه مملوك حاليًا لشركة Oracle.

يستخدم مفهوم تخزين البيانات في صفوف وجداول يتم تصنيفها في قاعدة البيانات. يستخدم لغة استعلام مهيكلة SQL للوصول إلى البيانات والأوامر ونقلها مثل “SELECT” و “UPDATE” و “INSERT” و “DELETE” لإدارتها.

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

مرونة البنية بين MongoDB و MySQL:

MongoDB : احد افضل الامور في ال MongoDB انك غير مقيد باي بنية ( schema design ) او شكل معين لادخال البيانات بامكانك بكل بساطة جمع مجموعة من الوثائق ( الوثيقة يقابلها الجدول في ال MySql ) في مجموعة لتشكل مخطط بيانات ( schema design ) معين حسب حاجة النظام.

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

MySQL: قبل أن تتمكن من تخزين أي شيء في MySQL ، تحتاج إلى تحديد الجداول والأعمدة بوضوح .

ولهذا السبب ، لا توجد مرونة كبيرة في طريقة تخزين البيانات إذا كنت تتبع التطبيع ( normalization ) . ايضا عمليات التعديل والتطوير تعتبر كابوس حقيقي لانك بحاجة لاعادة النظر في المخطط كل مرة ( schema design )

على سبيل المثال ، إذا كنت تدير نظام بنكي ، فيمكن إضافة معلوماته إلى الجدول المسمى “الحساب” على النحو التالي:

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

يقوم MongoDB بتخزين البيانات بطريقة كتابة JSON كما هو موضح أدناه:

يمكن تخزين هذه المستندات في مجموعة أيضًا.

يقوم MongoDB بإنشاء وثائق يمكنها تخزين أي معلومات تريدها على الرغم من أنها قد تسبب مشاكل في تناسق البيانات ودقتها. بينما MySQL يخلق نظام صارم ، وبالتالي يقلل من ارتكاب الأخطاء.

لغة الاستعلام في MongoDB و MySQL

MongoDB: تستخدم لغة الاستعلام غير المهيكلة ( un-Structured Query Language ) . لإنشاء استعلام في مستندات JSON ، يلزمك تحديد مستند معين ثم تحدد خصائص ترغب في تطابق النتائج معها.

تسخدم الـ MongoDB جمل شبيهة نوعاً ما بالـ SQL للاستعلام والادخال والتعديل والحذف ولكن الاختلاف يكمن اولا انك يجب ان تحدد الوثيقة المطلوبة ( تكافيء الجدول في ال MySql لكن مع امكانية تكرارها لعدد غير محدود ) ايضا يجب تحدد المعلمة او القيمة التي يتم عبرها اختيار منطقة التعديل عبر ( set$ ) والتي تكافيء ( set ) في ال Mysql

MySQL: يستخدم SQL لغة الاستعلام الهيكلية (Structured Query Language SQL ) للتواصل مع قاعدة البيانات. على الرغم من بساطته ، إلا أنه في الواقع لغة قوية للغاية والتي تتألف بشكل رئيسي من جزأين: لغة تعريف البيانات DDL و لغة معالجة البيانات DML.

للتوضيح اكثر لنلقي نظرة على هذا الجدول الذي يقارن بين الاوامر في كلا القاعدتين

العلاقات في MongoDB و MySQL

MongoDB: لا يوجد في الـ MongoDB عملية دمج النتائج ( Join ) لكن يوجد شيء مكافيء لها عبارة عن عملية تجميع للبيانات ( aggregate ) من خلال الامر ( $lookup )

على سبيل المثال ، اذا كنت تريد قائمة بالأشخاص الذين لديهم حساب التوفير ، حيث يتم تضمين حقل “المعرف – ID” الخاص في ملفات ( وثائق ) متعددة من مجموعة “الحساب” مع ملف مجموعة “قائمة حساب التوفير”.  لأيجاد معلومات مجمعة من الملفين “قائمة حسابات التوفير” و “الحسابات” المرتبطة بها ، يجب عليه جلب مستند “حفظ قائمة الحساب” ثم استخدام المراجع المدمجة لقراءة مستندات متعددة من مجموعة الحسابات كالتالي.

MySQL: واحدة من أفضل الأجزاء في MySQL هي عمليات JOIN. فبجملة استعلام بسيطة ، يسمح JOIN للمستخدم بربط البيانات من جدولين أو أكثر في استعلام واحد بمساعدة الأمر “SELECT” المنفرد.

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


التشاركية في الـ MongoDB و MySQL

التشاركية ( Sharding ) هي طريقة توزيع البيانات على أجهزة متعددة لدعم العمليات على البيانات الكبيرة والاستعلامات الكثيرة.

احيانا من الممكن ان يكون حجم الاستعلامات والادخال ( I/O ) اكبر من قدرة الذاكرة العشوائية او قدرة المعالج في النظام . يتم حل هذه المشكلات عن طريق زيادة الكفائة الافقية والعامودية ( horizontal and vertical scaling ).

تعني زيادة الكفائة العامودية ( vertical scaling ). زيادة سعة نفس الخادم عن طريق إضافة المزيد من الذاكرة العشوائي ( ram ) أو وحدة المعالجة المركزية ( cpu )أو مساحة التخزين ( memory ) .
بينما تعني زيادة الكفائة الافقية ( horizontal scaling ). تقسيم قاعدة البيانات وتحميلها على خوادم إضافية متعددة. بحيث يتوزع الجهد على اجهزة متعددة

MongoDB: لديها القدرة على تقسيم البيانات إلى مجموعات والمجموعات إلى مجموعات فرعية من البيانات لتخزينها عبر اجهزة متعددة. هذا يعطي التطبيق القدرة على النمو والتوسع دور النظر إلى قيود الجهاز او الخادم الواحد.
أيضًا ، يمكنها معالجة توزيع البيانات عبر أي عدد من الخوادم لزيادة استخدام مساحة الذاكرة وعمل توزيع للاستعلامات تلقائي ( load balance queries ).

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

تعتبر Mongo جيدة جدًا في بعض المناطق التي تكون فيها قواعد البيانات العلائقية ( relational databases ) ضعيفة بشكل خاص ، المشاركة التلقائية ، والحفاظ على أوقات استجابة ثابتة حتى في ظروف استئنائية.

MySQL: التشاركية في الـ Mysql مختلفة نوعا ما ، تحتاج إلى توزيع قاعدة بيانات MySQL الخاصة بنا . وسوف نختار النسخ المتماثل ( replication ). من السهل علينا ان نعمل خادم تابع ( slave server ) ليقراء المعلومات ويستنسخها من السيد ( Master ) يمكن انشاء العديد من الخوادم التابعة لتقراء من السيد لكن ماذا عن الكتابة ؟!

على عكس MongoDB ، MySQL لا يوجد الية للتشاركية . يمكن حل هذه المشكلة حلول خاصة بك كما فعلت Facebook و Pinterest.

النسخ المتماثل Replication

mongodb vs mysql

MongoDB: تدعم النسخ المتماثل (  master-slave replication ). وتدعم عمليات متعددة للنسخ في ان واحد ولكن. سيتم تعيين دور أساسي أو ثانوي لكل عضو في مجموعة النسخ المتماثلة في أي نقطة من العملية.

بشكل افتراضي ، تتم القراءة / الكتابة على النسخة المتماثلة الأساسية ثم يتم نسخها نسخاً متماثلاً في النسخ الثانوية.

MySQL: تدعم كلاً من النسخ المتماثل بين السيد والتابع والنسخ بين السيد والسيد ( master-slave replication and master-master replication ). يوفر لك النسخ متعدد المصادر ( Multi-source replication ) القدرة على نسخ البيانات من العديد من من الخوادم السيد ( master server) بشكل متوازي ( parallel ).

MongoDB – MySQL: مقارنة الاداء والسرعة

MongoDB: من المزايا الرئيسية التي يتفوق بها على MySQL هي قدرته على التعامل مع البيانات الكبيرة غير المنظمة. إنه أسرع بطريقة سحرية. .

MySQL: يلاحظ المطورون أن MySQL بطيئة للغاية مقارنة بـ MongoDB عندما يتعلق الأمر بالتعامل مع قاعدة البيانات الكبيرة. وبالتالي ، يعد اختيارًا أفضل للمستخدمين ذوي حجم البيانات الصغير ويبحث عن حل أكثر عمومية لأنه غير قادر على التعامل مع كميات كبيرة وغير منظمة من البيانات.

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

لنأخذ مثالًا عامًا لفهم سرعة MySQL و MongoDB وفقًا للوظائف المختلفة.

تم إجراء القياسات في الحالات التالية:

  • MySQL 5.7.9
  • MongoDB 3.2.0

وتم إجراء الاختبار على نفس البيئة وجميع الاختبارات للحصول على 1000000 سجل.

اختبار أداء “SELECT” و “UPDATE” و “INSERT”

يتضح من الرسم البياني أعلاه أن MongoDB يأخذ وقتًا أقل من MySQL للأوامر نفسها. وهذا يجب أن يكون أجاب على سؤالك: ما مدى سرعة MongoDB مقارنة MySQL!

متى يجب استخدام MongoDB؟

إذا كانت هذه متطلباتك ، يجب أن تستخدم MongoDB:

  • عندما تحتاج إلى توفير حجم كبير للبيانات من خلال الاسترداد التلقائي والسريع والفوري للبيانات
  • في المستقبل ، إذا كانت قاعدة بيانتك ستتوزع وتحتاج لتوزيعها على عدة سيرفرات نظرًا لأن MongoDB لديه حل تشاركية مضمّن.
  • إذا كان لديك مخطط بينات قابل للتغيير المستمر ( unstable schema ) وتريد تقليل تكلفة اعادة هيلكة قاعدة البيانات لديك.
  • إذا كانت معظم خدماتك قائمة على الحوسبة السحابية ، فإن MongoDB هو الأنسب بالنسبة لك ، حيث أن الية التشاركية فيه تتماشى جيدًا مع انظمة التوسع التلقائي ( auto scaling ) الحوسبة السحابية.

MongoDB: إيجابيات وسلبيات

  • MongoDB : هو الأفضل عندما تريد هيكل مرن لقاعدة البيانات ( flexibil schema ). ايضا يمكنك بسهولة استخدام مجموعات النسخ المتماثلة مع MongoDB ويمكن الاستفادة من قابلية التوسع. خطط التوسع مرنة ويمكن تحقيقها بسهولة عن طريق إضافة المزيد من الآلات وذاكرة الوصول العشوائي إلى النظام. ويشمل أيضا التحقق من صحة الوثائق والأنظمة المتكاملة.
  • تتضمن سلبيات MongoDB استخدام حجم بيانات أعلى من ال MySql .

متى تستخدم MySQL؟

إذا كانت هذه متطلباتك ، يجب أن تستخدم MySQL:

  • إذا بدأت للتو ولم تكن قاعدة بياناتك كبيرة الحجم ، فستساعدك MySQL في إعداد سهل الصيانة ومنخفض الصيانة.
    إذا كنت قد حددت مخططًا ثابتًا لقاعدة البيانات ولن تتغير بنية البيانات على مدار الوقت.
  • إذا كان لديك معدل تنفيذ مرتفع للجمل على سبيل المثال لدى موقع BBC حوالي 30،000 جملة ادخال في دقيقة ، 4000 استعلام في ساعة)
    إذا كان أمان البيانات على رأس أولوياتك ، فإن MySQL هو أكثر أنظمة إدارة قواعد البيانات أمانًا.

MySql: إيجابيات وسلبيات

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

استنتاج نهائي
للإجابة على السؤال الرئيسي حول “لماذا يجب علي استخدام X على Y؟” تحتاج إلى أن تأخذ في الاعتبار أهداف مشروعك والعديد من الأشياء الأخرى ذات الصلة.

MySQL منظمة بشكل كبير بسبب مرونتها وأدائها العالي وحماية موثوقة للبيانات وسهولة إدارتها. يمكن أن تعمل فهرسة البيانات المناسبة لحل مشكلتك بالأداء وتسهيل التفاعل وضمان المتانة.

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

نتيجة – ليست بالضرورة بديلاً عن الآخر. تعمل MongoDB و MySQL في ظروف مختلفة وكل منها يشكل حل لمشكلة معينة.