🚀 أصبحت CloudSek أول شركة للأمن السيبراني من أصل هندي تتلقى استثمارات منها ولاية أمريكية صندوق
اقرأ المزيد

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


في سلسلة من جزأين حول التقسيم في MongoDB، نوضح:
في الجزء الأول، نقدم برنامجًا تعليميًا حول كيفية إنشاء مجموعة مقسمة، مع شرح جميع أساسيات التقسيم.
لإنشاء مجموعة، نحتاج إلى أن نكون واضحًا بشأن:
مونغود و مونغوس هما عمليتان مختلفتان في 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
استخدم الأمر 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 ----> قطعة
يتم توزيع مستندات المجموعة بناءً على مفتاح المشاركة المعين. تنتمي المستندات الخاصة بمفتاح جزء معين إلى نفس الجزء.
يمكن تقسيم عملية التقسيم إلى قسمين:
لتبسيط هذا البرنامج التعليمي، نفضل التقسيم القائم على النطاق. يُعد التقسيم المستند إلى النطاق مفيدًا للاستعلامات التي تتضمن نطاقًا. على خلفية هذه العمليات، يقوم النظام أيضًا بتنفيذ هاتين العمليتين الرئيسيتين:
على سبيل المثال، إذا تجاوز حجم المقطع الحجم المحدد، سيحاول النظام، من تلقاء نفسه، معرفة المفتاح المتوسط المناسب لتقسيم المقطع إلى جزأين أو أكثر. يُعرف هذا باسم الانقسام، وهو تغيير غير مكلف للبيانات الوصفية. ومع ذلك، فإن الترحيل مسؤول عن الحفاظ على التوازن، على سبيل المثال، نقل جزء من جزء إلى آخر. هذه عملية مكلفة تتضمن عادةً نقل بيانات بقيمة 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)
}
}
}
في الجزء الثاني من هذه السلسلة المكونة من جزأين، سنستكشف الطرق المختلفة التي يمكننا من خلالها اختيار مفتاح القطع.