MongoDB المشاركة: برنامج تعليمي خطوة بخطوة مع مثال

⚡ ملخص ذكي

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

  • 🧩 المبدأ الأساسي: يؤدي التجزئة إلى تقسيم مجموعة منطقية واحدة عبر العديد من الأجزاء، ومع ذلك لا تزال الاستعلامات تتعامل مع البيانات كمجموعة واحدة.
  • ؟؟؟؟ ️ Cluster المكونات: تحتاج المجموعة المجزأة إلى أجزاء للبيانات، وخادم تكوين للبيانات الوصفية، وجهاز توجيه لتوجيه أوامر العميل.
  • ⚙️ مسار التنفيذ: ابدأ تشغيل خادم التكوين، وقم بتشغيل موجه mongos، وأضف الأجزاء، ثم قم بتمكين التجزئة على قاعدة البيانات والمجموعة.
  • 🔑 مفتاح الشظية: يحدد مفتاح التجزئة كيفية توزيع المستندات، لذا فإن العدد الكبير من العناصر وأنماط الوصول المتساوية أمران أساسيان.
  • 📈 الفائدة الأساسية: توفر تقنية التجزئة قابلية التوسع الأفقي، حيث تقوم بتوزيع التخزين وعبء العمل بدلاً من ترقية خادم واحد.

MongoDB المشاركة: برنامج تعليمي خطوة بخطوة مع مثال

ما هو المشاركة في MongoDB?

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

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

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

مزايا التجزئة في MongoDB

قبل تطبيق نظام المجموعة المجزأة، من المفيد فهم أسباب اعتماد الفرق لهذا النظام. وتتمثل الفوائد الرئيسية فيما يلي:

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

هذه المزايا مجتمعة تجعل من التجزئة النهج القياسي للتوسع MongoDB يتجاوز حدود خادم واحد.

كيفية تنفيذ المشاركة

يتم تنفيذ التجزئة باستخدام المجموعات، وهي ليست سوى مجموعة من MongoDB الحالات.

تتضمن مكونات الشارد ما يلي:

  1. بقوة – هذا هو الأصل، وهذا ليس إلا MongoDB المثيل الذي يحمل المجموعة الفرعية من البيانات. في بيئات الإنتاج، يجب أن تكون كافة الأجزاء جزءًا من مجموعات النسخ المتماثلة.
  2. خادم التكوين - هذا ال MongoDB مثيل يحتوي على بيانات وصفية حول المجموعة، وهي في الأساس معلومات حول مختلف MongoDB النسخ التي ستحتوي على بيانات الشظايا.
  3. جهاز توجيه - هذا ال MongoDB المثيل المسؤول بشكل أساسي عن إعادة توجيه الأوامر المرسلة من قبل العميل إلى الخوادم الصحيحة.

المشاركة خطوة بخطوة Cluster مثال

الخطوة 1) إنشاء قاعدة بيانات منفصلة لخادم التكوين.

mkdir /data/configdb

الخطوة 2) ابدأ ال MongoDB لنفترض أن لدينا خادمًا باسم "الخادم د"، والذي سيكون خادم التكوين الخاص بنا. سنحتاج إلى تشغيل الأمر التالي لتكوين الخادم كخادم تكوين.

mongod --configdb ServerD:27019

الخطوة 3) ابدأ تشغيل مثيل mongos عن طريق تحديد خادم التكوين.

mongos --configdb ServerD:27019

الخطوة 4) من واجهة سطر الأوامر الخاصة بـ mongo، قم بالاتصال بمثيل mongos.

mongo --host ServerD --port 27017

الخطوة 5) إذا كان لديك الخادم A والخادم B اللذان تحتاج إلى إضافتهما إلى المجموعة، فقم بتنفيذ الأوامر التالية.

sh.addShard("ServerA:27017")
sh.addShard("ServerB:27017")

الخطوة 6) قم بتفعيل تجزئة قاعدة البيانات. فإذا احتجنا إلى تجزئة قاعدة بيانات الموظفين (Employeedb)، نفّذ الأمر التالي.

sh.enableSharding("Employeedb")

الخطوة 7) قم بتفعيل خاصية التجزئة للمجموعة. فإذا احتجنا إلى تجزئة مجموعة الموظفين، نفّذ الأمر التالي.

sh.shardCollection("Employeedb.Employee", { "Employeeid": 1, "EmployeeName": 1 })

كيفية اختيار مفتاح الشظية في MongoDB

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

يتميز مفتاح التجزئة القوي عمومًا بالخصائص التالية:

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

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

التجزئة مقابل النسخ المتماثل في MongoDB

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

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

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

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

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

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

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

نعم. قم بتمكين التجزئة على قاعدة البيانات، وتأكد من وجود فهرس على مفتاح التجزئة المختار، ثم قم بتشغيل sh.shardCollection() على مساحة الاسم. MongoDB يبدأ بتوزيع المستندات الموجودة إلى أجزاء عبر الأجزاء المتاحة تلقائيًا.

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