إلى الخلف
مدينة الحندية
جدول المحتوى

ما هو التقسيم؟

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

  1. الجزء (الأجزاء): هي مثيلات MongoDB التي تستضيف مجموعات فرعية من البيانات. في الإنتاج، يجب أن تكون جميع الأجزاء جزءًا من مجموعات النسخ المتماثلة التي تحتفظ بنفس مجموعات البيانات. توفر مجموعات النسخ المتماثلة التكرار والتوافر العالي وهي الأساس لجميع عمليات نشر الإنتاج.Sharding - Shards in parts
  2. خادم التكوين: هو مثيل mongod يحتوي على بيانات وصفية حول مثيلات MongoDB المختلفة. يقوم خادم التكوين بتشغيل عمليات mongod صغيرة. في بيئة الإنتاج، عادةً ما تكون هناك 3 خوادم تهيئة، حيث يتكون كل خادم من نسخة من البيانات الوصفية، والتي يتم الاحتفاظ بها بشكل متزامن. وطالما كان خادم التكوين واحدًا على قيد الحياة، فستظل المجموعة نشطة.
  3. جهاز توجيه الاستعلام: هذا هو مثيل MongoDB المسؤول عن إعادة توجيه أوامر العميل إلى الخوادم الصحيحة. ليس لديها حالة ثابتة. يعمل كواجهة بين تطبيق العميل والجزء ذي الصلة. يقوم جهاز توجيه الاستعلام بجمع المعلومات اللازمة للإجابة على استعلام، ويقلل الإيجابيات الكاذبة والسلبيات الكاذبة في البيانات، ويوجه الاستعلام إلى مصادر المعلومات الأكثر دقة.

MongoDB Sharding explained

في سلسلة من جزأين حول التقسيم في MongoDB، نوضح:

  • كيفية إنشاء مجموعة مقسمة
  • كيفية اختيار مفتاح مشترك

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

البرنامج التعليمي الخاص بالمجموعات المشتركة

لإنشاء مجموعة، نحتاج إلى أن نكون واضحًا بشأن:

  1. عدد القطع المطلوبة في البداية
  2. عامل النسخ المتماثل والمعلمات الأخرى لمجموعة النسخ المتماثلة

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

بالنسبة إلى التوضيح الخاص بنا، لنأخذ 4 أجزاء (وهي a و b و c و d) وعامل تكرار قدره 3. لذلك في المجموع سيكون هناك 12 خادمًا واحدًا (عمليات mongod). سنقوم أيضًا بتشغيل 4 أجهزة توجيه للاستعلام (عمليات mongos) و 3 خوادم تكوين (عمليات mongod صغيرة) كما يفعل المرء في بيئة الإنتاج؛ تشغيل كل هذا في خادم واحد يحاكي الكتلة.

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

تتمثل فائدة تشغيل mongos على جهاز تطبيق العميل في أنه يعمل على واجهة محلية دون الحاجة إلى الخروج من الشبكة. ومع ذلك، يجب أن تتذكر تمكين خيارات الأمان الصحيحة. من ناحية أخرى، إذا قمت بتشغيله على خادم shard أو أي خادم آخر، فلن يضطر العميل إلى متابعة عملية إعداد الكتلة.

 

  • أدلة البيانات

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

الثلاثاء 27 أكتوبر بيوشجويال دروس المانجو $ بيانات middir -p/a0 الثلاثاء 27 أكتوبر بيوشجويال دروس المانجو $ بيانات mdir -p/a1 الثلاثاء 27 أكتوبر بيوشجويال دروس المانجو $ بيانات mdir -p/a2 الثلاثاء 27 أكتوبر بيوشجويال دروس المانجو $ بيانات mdir -p/0 الثلاثاء 27 أكتوبر بيوشجويال دروس المانجو $ بيانات mdir -p/b1 الثلاثاء 27 أكتوبر بيوشجويال دروس المانجو $ بيانات mdir -p/b2 الثلاثاء 27 أكتوبر بيوشجويال دروس المانجو $ بيانات mdir -p/x0 الثلاثاء 27 أكتوبر بيوشجويال دروس المانجو $ بيانات mdir -p/v1 الثلاثاء 27 أكتوبر بيوشجويال دروس المانجو $ بيانات mdir -p/v2 الثلاثاء 27 أكتوبر بيوشجويال دروس المانجو $ بيانات mdir -p/0 الثلاثاء 27 أكتوبر بيوشجويال دروس المانجو $ بيانات mdir -p/d1 الثلاثاء 27 أكتوبر بيوشجويال دروس المانجو $ بيانات mdir -p/d2 الثلاثاء 27 أكتوبر بيوشجويال دروس المانجو $ تهيئة mdir -p/cfg0 الثلاثاء 27 أكتوبر بيوشجويال دروس المانجو $ تهيئة mdir -p/cfg1 الثلاثاء 27 أكتوبر بيوشجويال دروس المانجو $ تهيئة mdir -p/cfg2 الثلاثاء 27 أكتوبر بيوشجويال دروس المانجو $ سجلات mkdir

 

  • خادم التكوين وخادم Shard

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

الثلاثاء 27 أكتوبر بيوشجويال دروس المانجو $ mongod --configsvr --replset cfg --dbpath config/cfg0 --المنفذ 26050 --fork --سجلات مسار اللوغات/log.cfg0 --logappend الثلاثاء 27 أكتوبر بيوشجويال دروس المانجو $ mongod --configsvr --replset cfg --dbpath config/cfg1 --المنفذ 26051 --fork --سجلات مسار السجل/log.cfg1 --logappend الثلاثاء 27 أكتوبر بيوشجويال دروس المانجو $ mongod --configsvr --replset cfg --dbpath config/cfg2 --المنفذ 26052 --fork --سجلات مسار اللوغات/log.cfg2 --logappend

الآن دعنا نواصل استخدام الخوادم المشتركة الخاصة بنا. هنا، نقوم بتشغيل الأمر mongod لتمرير المعلمة shardsvr التي تعلن بدورها أنها جزء من مجموعة مقسمة. نقوم بعد ذلك بإعادة تسمية مجموعة النسخ المتماثلة باسم الجزء.

 

الثلاثاء 27 أكتوبر بيوشجويال دروس المانجو $ mongod --shardsvr --إعادة تعيين بيانات --dbpath/a0 --المنفذ 27000 --fork --logpath logs/log.a0 --logappend الثلاثاء 27 أكتوبر بيوشجويال دروس المانجو $ mongod --shardsvr --إعادة تعيين بيانات --dbpath/a1 --المنفذ 27001 --fork --logpath logs/log.a1 --logappend الثلاثاء 27 أكتوبر بيوشجويال دروس المانجو $ mongod --shardsvr --إعادة تعيين بيانات --dbpath/a2 --المنفذ 27002 --fork --logpath logs/log.a2 --logappend الثلاثاء 27 أكتوبر بيوشجويال دروس المانجو $ mongod --shardsvr --إعادة تعيين بواسطة --dbpath data/b0 --المنفذ 27100 --fork --logpath logs/log.b0 --logappend الثلاثاء 27 أكتوبر بيوشجويال دروس المانجو $ mongod --shardsvr --إعادة تعيين بواسطة --dbpath/db1 --المنفذ 27101 --fork --logpath logs/log.b1 --logappend الثلاثاء 27 أكتوبر بيوشجويال دروس المانجو $ mongod --shardsvr --إعادة تعيين بواسطة --dbpath data/b2 --المنفذ 27102 --fork --logpath logs/log.b2 --logappend الثلاثاء 27 أكتوبر بيوشجويال دروس المانجو $ mongod --shardsvr --replset c --dbpath data/c0 --المنفذ 27200 --fork --logpath log/log.b0 --logappend الثلاثاء 27 أكتوبر بيوشجويال دروس المانجو $ mongod - shardsvr - إعادة تعيين c - بيانات dbpath/c1 - المنفذ 27201 - fork - سجلات logpath/log.b1 - logappend الثلاثاء 27 أكتوبر بيوشجويال دروس المانجو $ mongod --shardsvr --replset c --dbpath data/c2 --المنفذ 27202 --fork --logpath log/logappend الثلاثاء 27 أكتوبر بيوشجويال دروس المانجو $ mongod --shardsvr --إعادة تعيين البيانات x --dbpath/d0 --المنفذ 27300 --fork --logpath logs/log.c0 --logappend الثلاثاء 27 أكتوبر بيوشجويال دروس المانجو $ mongod --shardsvr --إعادة تعيين البيانات x --dbpath/d1 --المنفذ 27301 --fork --logpath logs/log.c1 --logappend الثلاثاء 27 أكتوبر بيوشجويال دروس المانجو $ mongod --shardsvr --إعادة تعيين البيانات x --dbpath/d2 --المنفذ 27302 --fork --logpath logs/log.c2 --logappend

 

  • خادم مونغوس

في الخطوة التالية، نقوم بتشغيل الأمر mongos لبدء عمليات mongos. من أجل معرفة مكان خوادم التكوين، نجتاز خوادم التكوين IP باستخدام المعلمة —configdb. سنقوم بتشغيل عملية mongos واحدة على منفذ mongo TCP القياسي للالتزام بأفضل الممارسات.

الثلاثاء 27 أكتوبر بيوشجويال دروس المانجو $ مونغوس --configdb cfg/127.0.0. 1:26050,127 .0.0. 1:26051,127 .0.0. 1:26052 --سجلات مسار/log.mongos0 --المنفذ 27017 --bind_ip 0.0.0.0 --fork --logappend الثلاثاء 27 أكتوبر بيوشجويال دروس المانجو $ مونغوس --configdb cfg/127.0.0. 1:26050,127 .0.0. 1:26051,127 .0.0. 1:26052 --سجلات مسار/log.mongos1 --المنفذ 26061 --bind_ip 0.0.0.0 --fork --logappend الثلاثاء 27 أكتوبر بيوشجويال دروس المانجو $ مونغوس --configdb cfg/127.0.0. 1:26050,127 .0.0. 1:26051,127 .0.0. 1:26052 --سجلات مسار/log.mongos2 --المنفذ 26062 --bind_ip 0.0.0.0 --fork --logappend الثلاثاء 27 أكتوبر بيوشجويال دروس المانجو $ مونغوس --configdb cfg/127.0.0. 1:26050,127 .0.0. 1:26051,127 .0.0. 1:26052 --سجلات مسار/log.mongos3 --المنفذ 26063 --bind_ip 0.0.0.0 --fork --logappend

 

لاحظ أننا لا نقوم أبدًا بتشغيل خادم التكوين والخادم المشترك على نفس منفذ mongo TCP القياسي.

الآن، تحقق مما إذا كانت جميع العمليات تعمل بسلاسة.

الثلاثاء 27 أكتوبر بيوشجويال دروس المانجو $ PS -A | جريب مونجو 26745؟؟ 0:00.95 مونغود --configsvr --replset cfg --dbpath config/cfg0 --المنفذ 26050 --fork --سجلات مسار/log.cfg0 --logappend 26748؟؟ 0:00.90 مونغود --configsvr --replset cfg --dbpath config/cfg1 --المنفذ 26051 --fork --سجلات مسار السجل/log.cfg1 --logappend 26754؟؟ 0:00.90 مونغود --configsvr --replset cfg --dbpath config/cfg2 --المنفذ 26052 --fork --سجلات مسار/log.cfg2 --logappend 26757؟؟ 0:00.77 مونغود --shardsvr --إعادة تعيين بيانات --dbpath/a0 --المنفذ 27000 --fork --logpath log/log.a0 --logappend 26760؟؟ 0:00.77 مونغود --shardsvr --إعادة تعيين بيانات --dbpath/a1 --المنفذ 27001 --fork --سجلات logpath/log.a1 --logappend 26763؟؟ 0:00.76 مونغود --shardsvr --إعادة تعيين بيانات --dbpath/a2 --المنفذ 27002 --fork --سجلات logpath/log.a2 --logappend 26766؟؟ 0:00.76 مونغود --shardsvr --إعادة تعيين بواسطة --dbpath data/b0 --المنفذ 27100 --fork --logpath log/log.b0 --logappend 26769؟؟ 0:00.77 مونغود --shardsvr --إعادة تعيين بواسطة --dbpath data/b1 --المنفذ 27101 --fork --logpath log/logappend 26772؟؟ 0:00.75 مونغود --shardsvr --إعادة تعيين بواسطة --dbpath data/b2 --المنفذ 27102 --fork --logpath log/logappend 26775؟؟ 0:00.73 مونغود --shardsvr --replset c --dbpath data/c0 --المنفذ 27200 --fork --سجلات مسار اللوغات/log.b0 --logappend 26784؟؟ 0:00.75 مونغود --shardsvr --replset c --dabpath data/c1 --المنفذ 27201 --fork --سجلات logpath/log.b1 --logappend 26791؟؟ 0:00.74 مونغود --shardsvr --replset c --dabpath data/c2 --المنفذ 27202 --fork --logpath log/logappend 26794؟؟ 0:00.77 مونغود --shardsvr --إعادة تعيين البيانات x --dbpath/d0 --المنفذ 27300 --fork --logpath log/log.c0 --logappend 26797؟؟ 0:00.75 مونغود --shardsvr --إعادة تعيين بيانات dbpath/d1 --المنفذ 27301 --fork --logpath log/log.c1 --logappend 26800؟؟ 0:00.71 مونغود --shardsvr --إعادة تعيين بيانات dbpath/d2 --المنفذ 27302 --fork --logpath log/log.c2 --logappend 26803؟؟ 0:00.00 مونغوس --configdb cfg/127.0.0. 1:26050,127 .0.0. 1:26051,127 .0.0. 1:26052 --سجلات log.mongos0 --المنفذ 27017 --bind_ip 0.0.0.0 --fork --logappend 26804؟؟ 0:00.24 مونغوس --configdb cfg/127.0.0. 1:26050,127 .0.0. 1:26051,127 .0.0. 1:26052 --سجلات log.mongos0 --المنفذ 27017 --bind_ip 0.0.0.0 --fork --logappend 76826؟؟ 8:58.30 /usr/local/opt/mongodb-Community/bin/mongod --config /usr/local/etc/mongod.conf 26817 ttys009 0:00.00 غريبي مونجو 26801 ttys016 0:00.01 مونغوس --configdb cfg/127.0.0. 1:26050,127 .0.0. 1:26051,127 .0.0. 1:26052 --سجلات المسار/log.mongos0 --المنفذ 27017 --bind_ip 0.0.0.0 --fork --logappend

 

  • حالة وبدء مجموعات النسخ المتماثلة

اتصل بأحد الخوادم المشتركة. على سبيل المثال، دعنا نتصل بـ 0 جزء

الثلاثاء 27 أكتوبر بيوشجويال دروس المانجو $ منفذ مونجو 27000

 

قم بتشغيل الأمر التالي للتحقق من حالة مجموعة النسخ المتماثلة

> حالة السيدة () { «وقت التشغيل»: الطابع الزمني (0، 0)، «حسنًا»: 0، «errmsg»: «لم يتم استلام أي تكوين إعادة تعيين»، «الكود»: 94، «اسم الكود»: «لم تتم تهيئته بعد»، «$كلستر تايم»: { «وقت الكتلة»: الطابع الزمني (0، 0)، «التوقيع»: { «هاش»: بين داتا (0، «AAAAAAAAAAAAAAAAAAAAAAAAAAAAA=»)، «معرف المفتاح»: رقم طويل (0) } } }

 

ما يلي هو مربع حوار يقول «تشغيل rs.initate () لم يتم بعد للمجموعة». لبدء مجموعة النسخ المتماثلة، قم بتشغيل الأمر التالي:

> rs.initate () { «info2": «لم يتم تحديد أي تكوين. باستخدام التكوين الافتراضي للمجموعة»، «أنا»: «المضيف المحلي: 27000"، «موافق»: 1، «$كلستر تايم»: { «وقت الكتلة»: الطابع الزمني (1604637446، 1)، «التوقيع»: { «هاش»: بين داتا (0، «AAAAAAAAAAAAAAAAAAAAAAAAAAAAA=»)، «معرف المفتاح»: رقم طويل (0) } «وقت التشغيل»: الطابع الزمني (1604637446، 1) }

 

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

ج: أساسي > rs.add («127.0.0. 1:27001") { «موافق»: 1، «$كلستر تايم»: { «وقت الكتلة»: الطابع الزمني (1604637486، 1)، «التوقيع»: { «هاش»: بين داتا (0، «AAAAAAAAAAAAAAAAAAAAAAAAAAAAA=»)، «معرف المفتاح»: رقم طويل (0) } «وقت التشغيل»: الطابع الزمني (1604637486، 1) } ج: أساسي > rs.add («127.0.0. 1:27002 «) { «موافق»: 1، «$كلستر تايم»: { «وقت الكتلة»: الطابع الزمني (1604637491، 1)، «التوقيع»: { «هاش»: بين داتا (0، «AAAAAAAAAAAAAAAAAAAAAAAAAAAAA=»)، «معرف المفتاح»: رقم طويل (0) } «وقت التشغيل»: الطابع الزمني (1604637491، 1) }

 

قم بتشغيل rs.status () للتحقق من حالة البدء. بمجرد البدء، كرر نفس العملية للأجزاء الأخرى وخادم التكوين.

 

  • إضافة شظايا

قم بالاتصال بعملية mongos لإضافة شظايا إلى الكتلة.

الثلاثاء 27 أكتوبر بيوشجويال دروس المانجو $ منفذ مونجو 27017

 

قم بتشغيل الأمر أدناه لإضافة أجزاء:

النمس > ش.أدشارد («A/127.0.0. 1:2700") { «تمت إضافة التجزئة»: «a»، «موافق»: 1، «وقت التشغيل»: الطابع الزمني (1604637907، 8)، «$كلستر تايم»: { «وقت الكتلة»: الطابع الزمني (1604637907، 8)، «التوقيع»: { «هاش»: بين داتا (0، «AAAAAAAAAAAAAAAAAAAAAAAAAAAAA=»)، «معرف المفتاح»: رقم طويل (0) } } } النمس > شارد إتش دي إس («b/127.0.0. 1:27100 بوصة) { «تمت إضافة التجزئة»: «b»، «موافق»: 1، «وقت التشغيل»: الطابع الزمني (1604638045، 6)، «$كلستر تايم»: { «وقت الكتلة»: الطابع الزمني (1604638045، 6)، «التوقيع»: { «هاش»: بين داتا (0، «AAAAAAAAAAAAAAAAAAAAAAAAAAAAA=»)، «معرف المفتاح»: رقم طويل (0) } } } النمس > لوحة المفاتيح («c/127.0.0. 1:27200 بوصة) { «تمت إضافة التجزئة»: «c»، «موافق»: 1، «وقت التشغيل»: الطابع الزمني (1604638065، 4)، «$كلستر تايم»: { «وقت الكتلة»: الطابع الزمني (1604638065، 4)، «التوقيع»: { «هاش»: بين داتا (0، «AAAAAAAAAAAAAAAAAAAAAAAAAAAAA=»)، «معرف المفتاح»: رقم طويل (0) } } } النمس > شارد إتش دي إس («د/127.0.0. 1:27300 بوصة) { «تمت إضافة التجزئة»: «d»، «موافق»: 1، «وقت التشغيل»: الطابع الزمني (1604638086، 6)، «$كلستر تايم»: { «وقت الكتلة»: الطابع الزمني (1604638086، 6)، «التوقيع»: { «هاش»: بين داتا (0، «AAAAAAAAAAAAAAAAAAAAAAAAAAAAA=»)، «معرف المفتاح»: رقم طويل (0) } } }

ملاحظة: عند الجري ش.أدشارد ('a/127.0.0. 1:27000 ')، إذا حصلت على مخرجات كما هو موضح أدناه، جرب الجري sh.addshard ('a/127.0.0. 1:27001 ') أو sh.addshard ('a/127.0.0. 1:27002').

{ «موافق» : 0، «أخطاء» : «في القائمة الأولية a/127.0.0. 1:27000، المضيف 127.0.0. 1:27000 لا ينتمي إلى مجموعة النسخ المتماثلة a؛ تم العثور على {hosts: [\" localhost:27000\»،\ "127.0.0. 1:27001\»،\ "127.0.0. 1:27002\»]، setName:\ «a\»، setVersion: 3، ismaster: صحيح، ثانوي: خطأ، أساسي:\ "localhost:\" localhost:\ "a\»، setVersion: 3، ismaster: صحيح، ثانوي: خطأ، أساسي:\ "localhost:\" localhost:3 27000\»، أنا:\ «المضيف المحلي: 27000\»، معرف الانتخابات: معرف الكائن ('7fffffff0000000000000001')، آخر كتابة: {وقت التشغيل: {ts: الطابع الزمني (1604637886، 1)، t: 1}، تاريخ آخر كتابة: تاريخ جديد (1604637886000)، وقت تشغيل الأغلبية: {ts: الطابع الزمني (1604637886، 1), t: 1}, تاريخ كتابة الأغلبية: التاريخ الجديد (1604637886000)}, الحد الأقصى لحجم الكائن: 16777216 , الحد الأقصى لحجم الرسالة: 48000000, الحد الأقصى لحجم دفعة الكتابة: 100000, التوقيت المحلي: التاريخ الجديد (1604637894239), المهلة المنطقية للجلسة: 30, معرف الاتصال: 21, الحد الأدنى لإصدار السلك: 0, الحد الأقصى لإصدار السلك: 8, للقراءة فقط: خطأ, الضغط: [\ «snappy\»,\ «zstd\»,\ «zlib\»], OK: 1.0, $Cluster الوقت: {وقت المجموعة: الطابع الزمني (1604637886، 1)، التوقيع: {الهاش: بن داتا (0، 0000000000000000000000000000000000000000)، معرف المفتاح: 0}}، وقت التشغيل: الطابع الزمني (1604637886، 1)}»، «كود» : 96، «اسم الكود» : «فشلت العملية»، «وقت التشغيل» : الطابع الزمني (1604637888، 1)، «$كلستر تايم» : { «كلاستر تايم» : الطابع الزمني (1604637888، 1)، «التوقيع» : { «هاش» : بينداتا (0،«AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=» «معرف المفتاح» : رقم طويل (0) } } }

 

مشاركة مجموعة
اركض الحالة () للتحقق مما إذا كانت الأجزاء قد تمت إضافتها.
الآن بعد أن قمنا بإعداد الكتلة، دعونا نختبرها.

عند مشاركة مجموعة، يجب عليك اختيار مجموعة محددة مفتاح مشترك. وبدون ذلك يكون التقسيم مستحيلاً. يساعد على توزيع المستندات بين أعضاء المجموعة.
تسمى البيانات المخزنة بواسطة المفتاح a قطعة. لا يُسمح بحجم المقطع إلا بين 1 و1024 ميغابايت.
على سبيل المثال، لنفترض مجموعة من المستندات التالية:

{ «_id»: معرف الكائن («5f97d97eb7a0a940f157ebc8" «x»: 1 }

 

ونستخدم المفتاح x لمشاركة المجموعة. يتم توزيع البيانات كما هو موضح أدناه:

مشاركة x_منخفضة x_عالية 0 1000 S2 ----> قطعة 1000 2000 ثانية ----> قطعة 2000 3000 S1 ----> قطعة

 

يتم توزيع مستندات المجموعة بناءً على مفتاح المشاركة المعين. تنتمي المستندات الخاصة بمفتاح جزء معين إلى نفس الجزء.

يمكن تقسيم عملية التقسيم إلى قسمين:

  1. تقسيم قائم على النطاق
  2. تجزئة مجزأة

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

  • سبليت
  • الترحيل (تم التعامل معه من قبل المجموعة) موازن)

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

الثلاثاء 27 أكتوبر بيوشجويال دروس المانجو $ منفذ مونجو 27017 النمس > استخدم البرنامج التعليمي النمس > لـ (var i=0؛ i<999999؛ i++) {db.foo.insert ({x:i})}

 

للسماح بمشاركة قاعدة البيانات، يتعين علينا تمكينها يدويًا. اتصل بمثيل mongo وقم بتشغيله <dbname>إنها تمكن هاردينغ («»).

mongos> إنها تمكن هاردينغ («البرنامج التعليمي») { «موافق»: 1، «وقت التشغيل»: الطابع الزمني (1604638168، 21)، «$كلستر تايم»: { «وقت الكتلة»: الطابع الزمني (1604638168، 21)، «التوقيع»: { «هاش»: بين داتا (0، «AAAAAAAAAAAAAAAAAAAAAAAAAAAAA=»)، «معرف المفتاح»: رقم طويل (0) } } }

 

إذا قمت بتشغيل sh.status () في قاعدة البيانات، فسوف تقوم بإرجاع «partitioned = True» في قاعدة بيانات البرنامج التعليمي.

الآن نشارك مجموعتنا باستخدام مفتاح x. لمشاركة مجموعة، يتعين علينا أولاً إنشاء فهرس على المفتاح ثم تشغيله <db_name>مجموعة إس إتش شارد («. <collection_name>«،<key>).

النمس > مؤشر ضمان db.foo ({x: 1}) { «خام»: { «b/127.0.0. 1:27101، 127 .0.0. 1:27102، المضيف المحلي: 27100": { «المجموعة التي تم إنشاؤها تلقائيًا»: خطأ، «عدد الفهارس من قبل»: 1، «عدد الفهارس بعد»: 2، «موافق»: 1 } «موافق»: 1، «وقت التشغيل»: الطابع الزمني (1604638185، 9)، «$كلستر تايم»: { «وقت الكتلة»: الطابع الزمني (1604638185، 9)، «التوقيع»: { «هاش»: بين داتا (0، «AAAAAAAAAAAAAAAAAAAAAAAAAAAAA=»)، «معرف المفتاح»: رقم طويل (0) } } } النمس > مجموعة إس إتش شارد («توتوريال.foo»، {x: 1}) { «المجموعات المشتركة»: «tutorial.foo»، «معرف المجموعة»: المعرف الفريد («b6506a90-dc0f-48d2-ba2-c15bc94c0d6")، «موافق»: 1، «وقت التشغيل»: الطابع الزمني (1604638203، 39)، «$كلستر تايم»: { «وقت الكتلة»: الطابع الزمني (1604638203، 39)، «التوقيع»: { «هاش»: بين داتا (0، «AAAAAAAAAAAAAAAAAAAAAAAAAAAAA=»)، «معرف المفتاح»: رقم طويل (0) } } }

 

تم تقسيم المجموعة الآن. للتحقق من توزيع الأجزاء وعدد القطع (nchunks)، قم بتشغيل الأمر التالي:

mongos> استخدم البرنامج التعليمي المانغو> db.foo.stats ()

 

لمعرفة توزيع الأجزاء عبر جميع قواعد البيانات، قم بتشغيل الأمر أدناه:

النمس > الحالة ()

 

لنقم بتشغيل بعض الاستعلامات.

mongos> استخدم البرنامج التعليمي النوم> db.foo.find ({x: 55})

لعرض خطة الاستعلام أو لفهم كيفية استعلامات الكتلة من خلال خوادم مختلفة للحصول على المستند، قم بإلحاق .explain () في نهاية الاستعلام.

النمس > db.foo.find ({x: 55}). شرح () { «مخطط الاستعلام»: { «إصدار مخطط منغوليا»: 1، «الخطة الفائزة»: { «المرحلة»: «SINGLE_SHARD»، «شظايا»: [ { «الاسم المشترك»: «b»، «سلسلة الاتصال»: «b/127.0.0. 1:27101، 127 .0.0. 1:27102، المضيف المحلي: 27100"، «معلومات الخادم»: { «المضيف»: «بيوشس-ماكبوك-برو.لوكال»، «المنفذ»: 27100، «الإصدار»: «4.2.8"، «نسخة جيت»: «43 دي 25964249164 د 76د 5e04dd6cf38f6111e21f5f» «إصدار المخطط»: 1، «مساحة الاسم»: «tutorial.foo»، «مجموعة فلاتر الفهرس»: خطأ، «الاستعلام الذي تم تحليله»: { «x»: { «$eq»: 55 } «استعلام هاش»: «716F281A»، «مفتاح بلانك»: «0FA0E5FD»، «الخطة الفائزة»: { «المرحلة»: «FETCH»، «مرحلة الإدخال»: { «المرحلة»: «مشاركة الفلتر»، «مرحلة الإدخال»: { «المرحلة»: «IXSCAN»، «نمط المفاتيح»: { «x»: 1 «اسم الفهرس»: «x_1"، «isMultikey»: خطأ، «مسارات متعددة المفاتيح»: { «x»: [] «IsUnique»: خطأ، «isSparse»: خطأ، «جزئي»: خطأ، «إصدار الفهرس»: 2، «الاتجاه»: «إلى الأمام»، «حدود الفهرس»: { «x»: [ «[55.0، 55.0]» ] } } } «الخطط المرفوضة»: [] } ] } «معلومات الخادم»: { «المضيف»: «بيوشس-ماكبوك-برو.لوكال»، «المنفذ»: 27017، «الإصدار»: «4.2.8"، «نسخة جيت»: «43 دي 25964249164 د 76د 5e04dd6cf38f6111e21f5f» «موافق»: 1، «وقت التشغيل»: الطابع الزمني (1604638250، 30)، «$كلستر تايم»: { «وقت الكتلة»: الطابع الزمني (1604638255، 27)، «التوقيع»: { «هاش»: بين داتا (0، «AAAAAAAAAAAAAAAAAAAAAAAAAAAAA=»)، «معرف المفتاح»: رقم طويل (0) } } }

 

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

لم يتم العثور على أية عناصر.

مدونات ذات صلة