14 شيون مان چاهيان ٿو مونگو ڊي بي سان شروع ڪرڻ کان پهريان مون کي خبر هجي

مضمون جو ترجمو ڪورس جي شروعات جي موقعي تي تيار ڪيو ويو "غير لاڳاپو ڊيٽابيس".

14 شيون مان چاهيان ٿو مونگو ڊي بي سان شروع ڪرڻ کان پهريان مون کي خبر هجي

نمايان

  • اهو انتهائي اهم آهي هڪ اسڪيما کي ترقي ڪرڻ جيتوڻيڪ اهو اختياري آهي MongoDB ۾.
  • ساڳئي طرح، انڊيڪسس کي توهان جي اسڪيما ۽ رسائي جي نمونن سان ملائڻ گهرجي.
  • وڏيون شيون ۽ وڏيون صفون استعمال ڪرڻ کان پاسو ڪريو.
  • مونگو ڊي بي سيٽنگن سان محتاط رھو، خاص طور تي جڏھن اھو اچي ٿو سيڪيورٽي ۽ اعتبار جي.
  • مونگو ڊي بي وٽ ڪو سوال آپٽمائزر نه آهي، تنهن ڪري توهان کي محتاط رهڻ گهرجي جڏهن سوال جي عملن کي انجام ڏيو.

مان تمام گهڻي عرصي کان ڊيٽابيس سان ڪم ڪري رهيو آهيان، پر تازو ئي مونگو ڊي بي دريافت ڪيو آهي. ڪجھ شيون آھن جيڪي مون کي ڄاڻڻ کان پھريان ان سان ڪم ڪرڻ شروع ڪيو. جڏهن ڪو ماڻهو اڳ ۾ ئي ڪنهن خاص فيلڊ ۾ تجربو رکي ٿو، انهن وٽ اڳ ۾ ئي تصور آهي ته ڊيٽابيس ڇا آهن ۽ اهي ڇا ڪندا آهن. ٻين لاءِ سمجھڻ ۾ آساني پيدا ڪرڻ جي اميد ۾، مان عام غلطين جي فهرست پيش ڪريان ٿو.

بغير تصديق جي مونگو ڊي بي سرور ٺاهڻ

بدقسمتي سان، MongoDB ڊفالٽ جي تصديق جي بغير نصب ٿيل آهي. مقامي طور تي رسائي واري ورڪ اسٽيشن لاءِ، هي عمل عام آهي. پر جيئن ته MongoDB هڪ ملٽي يوزر سسٽم آهي جيڪو ميموري جي وڏي مقدار کي استعمال ڪرڻ پسند ڪندو آهي، اهو بهتر ٿيندو جيڪڏهن توهان ان کي سرور تي وڌ کان وڌ ريم سان لڳايو، جيتوڻيڪ توهان صرف ان کي ترقي لاءِ استعمال ڪرڻ وارا آهيو. ڊفالٽ پورٽ ذريعي سرور تي انسٽال ڪرڻ مشڪل ٿي سگهي ٿو، خاص طور تي جيڪڏهن ڪو جاوا اسڪرپٽ ڪوڊ درخواست ۾ عمل ڪري سگهجي ٿو (مثال طور، $where لاء هڪ خيال جي طور تي انجيڪشن).

تصديق جا ڪيترائي طريقا آھن، پر سڀ کان آسان آھي يوزر آئي ڊي/پاسورڊ سيٽ ڪرڻ. هن خيال کي استعمال ڪريو جڏهن توهان سوچيو ته فينسي تصديق جي بنياد تي LDAP. جڏهن اهو سيڪيورٽي تي اچي ٿو، مونگو ڊي بي کي مسلسل اپڊيٽ ڪيو وڃي، ۽ لاگ ان کي هميشه غير مجاز رسائي لاء چيڪ ڪيو وڃي. مثال طور، مان هڪ مختلف بندرگاهن کي ڊفالٽ پورٽ طور چونڊڻ چاهيان ٿو.

پنهنجي حملي واري مٿاڇري کي MongoDB تي پابند ڪرڻ نه وساريو

MongoDB سيڪيورٽي چيڪ لسٽ نيٽ ورڪ جي مداخلت ۽ ڊيٽا ليڪ جي خطري کي گهٽائڻ لاءِ سٺيون صلاحون شامل آهن. ان کي برش ڪرڻ آسان آهي ۽ چئجي ته هڪ ڊولپمينٽ سرور کي اعلي سطحي سيڪيورٽي جي ضرورت ناهي. بهرحال، اهو ايترو سادو ناهي ۽ اهو سڀني MongoDB سرورن تي لاڳو ٿئي ٿو. خاص طور تي، جيڪڏهن ڪو زبردستي سبب نه آهي استعمال ڪرڻ لاء mapReduce, group يا $ ڪٿي، توهان کي ترتيب ڏيڻ واري فائل ۾ لکڻ سان جاوا اسڪرپٽ ۾ صوابديدي ڪوڊ جي استعمال کي بند ڪرڻ جي ضرورت آهي javascriptEnabled:false. جيئن ته ڊيٽا فائلون معياري MongoDB ۾ انڪوڊ ٿيل نه آهن، اهو مونگو ڊي بي سان هلائڻ جو احساس آهي وقف استعمال ڪندڙ، جنهن کي فائلن تائين مڪمل رسائي آهي، صرف ان تائين محدود رسائي ۽ آپريٽنگ سسٽم جي پنهنجي فائل رسائي ڪنٽرول کي استعمال ڪرڻ جي صلاحيت سان.

سرڪٽ کي ترقي ڪرڻ دوران غلطي

MongoDB اسڪيما استعمال نٿو ڪري. پر هن جو مطلب اهو ناهي ته منصوبي جي ضرورت ناهي. جيڪڏهن توهان صرف دستاويزن کي ذخيرو ڪرڻ چاهيو ٿا بغير ڪنهن هڪجهڙائي واري نموني، انهن کي محفوظ ڪرڻ تڪڙو ۽ آسان ٿي سگهي ٿو، پر بعد ۾ انهن کي ٻيهر حاصل ڪرڻ ڏکيو ٿي سگهي ٿو. تمام سخت.

کلاسي مضمون "مونگو ڊي بي اسڪيما ڊيزائن لاءِ انگن جا 6 ضابطا“ اهو پڙهڻ جي لائق آهي، ۽ خاصيتون جهڙوڪ اسڪيما ايڪسپلورر ٽئين پارٽي جي اوزار ۾ اسٽوڊيو 3T، اهو سرڪٽ جي باقاعده چيڪن لاء استعمال ڪرڻ جي قابل آهي.

ترتيب جي ترتيب کي نه وساريو

ترتيب جي ترتيب کي وسارڻ ڪنهن ٻئي غلط ترتيب جي ڀيٽ ۾ وڌيڪ مايوسي ۽ وڌيڪ وقت ضايع ڪري سگهي ٿو. ڊفالٽ طور MongoBD استعمال ڪري ٿو بائنري ترتيب. پر اهو ممڪن ناهي ته اهو ڪنهن لاء مفيد آهي. ڪيس-حساس، تلفظ-حساس، بائنري قسمون گذريل صديءَ جي 80 واري ڏهاڪي ۾ موتي، ڪيفٽن ۽ گهڙيل مُڇن سان گڏ تجسس واري انداز ۾ سمجهيا ويندا هئا. هاڻي انهن جو استعمال ناقابل معافي آهي. حقيقي زندگي ۾، "موٽرسائيڪل" ساڳيو آهي "موٽر سائيڪل". ۽ ”برطانيه“ ۽ ”برطانيه“ ساڳي جڳهه آهن. هڪ ننڍو اکر صرف هڪ وڏي اکر جي برابر آهي. ۽ مون کي ڊائريڪٽڪس کي ترتيب ڏيڻ تي شروع نه ڪريو. جڏهن MongoDB ۾ ڊيٽابيس ٺاهي، استعمال ڪريو تلفظ غير حساس ڪوليشن ۽ رجسٽر، جيڪو ٻوليءَ سان ملندو آهي ۽ سسٽم استعمال ڪندڙ ثقافت. اهو اسٽرنگ ڊيٽا ذريعي ڳولڻ کي تمام آسان بڻائي ڇڏيندو.

وڏن دستاويزن سان گڏ مجموعو ٺاهيو

MongoDB 16MB تائين وڏن دستاويزن کي گڏ ڪرڻ ۾ خوش آهي، ۽ گرڊ ايف ايس 16 MB کان وڏي دستاويزن لاء ٺهيل. پر صرف ان ڪري ته وڏا دستاويز اتي رکي سگهجن ٿا، انهن کي ذخيرو ڪرڻ سٺو خيال ناهي. MongoDB بھترين ڪم ڪندو جيڪڏھن توھان انفرادي دستاويزن کي ذخيرو ڪريو جيڪي سائيز ۾ ڪجھ ڪلو بائيٽ آھن، انھن کي ھڪڙي وڏي SQL ٽيبل ۾ قطارن وانگر وڌيڪ علاج ڪندي. وڏن دستاويزن سان مسئلن جو هڪ ذريعو هوندو پيداوار.

وڏين صفن سان دستاويز ٺاهڻ

دستاويز arrays تي مشتمل ٿي سگھي ٿو. اھو بھترين آھي جيڪڏھن صف ۾ عناصر جو تعداد چار عددي نمبر کان پري آھي. جيڪڏهن عناصر هڪ صف ۾ بار بار شامل ڪيا ويندا آهن، اهو ان ۾ موجود دستاويز کي وڌائي ڇڏيندو ۽ ان جي ضرورت پوندي. ھلڻ، جنهن جو مطلب آهي اهو ضروري هوندو اپڊيٽ انڊيڪس پڻ. جڏهن هڪ وڏي صف سان هڪ دستاويز کي ٻيهر ترتيب ڏيو، انڊيڪس اڪثر ڪري اوور رائٽ ڪيو ويندو، ڇاڪاڻ ته اتي موجود آهي رڪارڊ، جيڪو ان جي انڊيڪس کي محفوظ ڪري ٿو. هي ري-انڊيڪسنگ پڻ ٿئي ٿي جڏهن هڪ دستاويز داخل ڪيو وڃي يا ختم ڪيو وڃي.

مونگو ڊي بي کي ڪجهه سڏيو ويو آهي "فيڪٽر ڀريو"، جيڪو هن مسئلي کي گھٽائڻ لاءِ دستاويزن کي وڌائڻ لاءِ ڪمرو مهيا ڪري ٿو.
توهان شايد اهو سوچيو ته توهان بغير سرن جي ترتيب جي بغير ڪري سگهو ٿا. بدقسمتي سان، انڊيڪس جي کوٽ سبب توهان کي ٻين مسئلن جو سبب بڻائي سگھي ٿو. جيئن ته دستاويز شروع کان ختم ٿيڻ تائين اسڪين ڪيا ويندا آهن، صف جي آخر ۾ عناصر جي ڳولا ۾ گهڻي وقت لڳندي، ۽ اهڙي دستاويز سان لاڳاپيل اڪثر آپريشنز هوندا. آهستي.

اهو نه وساريو ته هڪ مجموعي ۾ مرحلن جو حڪم اهم آهي

ڊيٽابيس سسٽم ۾ هڪ سوال آپٽمائزر سان، سوال جيڪي توهان لکندا آهيو انهن جي وضاحت آهي ته توهان ڇا حاصل ڪرڻ چاهيو ٿا، نه ته اهو ڪيئن حاصل ڪجي. هي ميکانيزم هڪ ريسٽورنٽ ۾ ترتيب ڏيڻ سان قياس سان ڪم ڪري ٿو: عام طور تي توهان صرف هڪ ڊش آرڊر ڪندا آهيو، ۽ ڪڪ کي تفصيلي هدايتون نه ڏيو.

MongoDB ۾، توهان ڪڪ کي هدايت ڪندا آهيو. مثال طور، توهان کي پڪ ڪرڻ جي ضرورت آهي ته ڊيٽا گذري ٿو reduce جيترو جلدي ممڪن ٿي سگهي پائپ لائن ۾ استعمال ڪندي $match и $project، ۽ ترتيب صرف ان کان پوء ٿيندي آهي reduce، ۽ اهو ته ڳولها انهي ترتيب ۾ ٿئي ٿي جيئن توهان چاهيو ٿا. هڪ سوال آپٽمائزر هجڻ جيڪو غير ضروري ڪم کي ختم ڪري ٿو، بهتر طريقي سان قدمن کي ترتيب ڏئي ٿو، ۽ شامل ٿيڻ جا قسم چونڊي ٿو توهان کي خراب ڪري سگهي ٿو. MongoDB سان، توهان وٽ سهولت جي قيمت تي وڌيڪ ڪنٽرول آهي.

اوزار وانگر اسٽوڊيو 3 ٽي ۾ مجموعي سوالن جي تعمير کي آسان بڻائي ڇڏيندو منڊو ڊي. Aggregation Editor فيچر توهان کي اجازت ڏئي ٿو پائپ لائن بيانن کي هڪ وقت ۾ هڪ اسٽيج تي لاڳو ڪرڻ، ۽ ڊيبگنگ کي آسان ڪرڻ لاءِ هر اسٽيج تي ان پٽ ۽ آئوٽ پٽ ڊيٽا جو معائنو ڪريو.

جلدي رڪارڊنگ استعمال ڪندي

ڪڏهن به مقرر نه ڪريو MongoDB لکڻ جي اختيارن کي تيز رفتار حاصل ڪرڻ لاءِ پر گهٽ قابل اعتماد. هن موڊ "فائل ۽ وساريو" تڪڙو لڳي ٿو ڇاڪاڻ ته لکڻ کان اڳ حڪم واپس ڪيو ويو آهي. جيڪڏهن سسٽم حادثو ٿيڻ کان اڳ ڊيٽا کي ڊسڪ ۾ لکيو ويو آهي، اهو گم ٿي ويندو ۽ هڪ متضاد حالت ۾ ختم ٿي ويندو. خوش قسمت، 64-bit MongoDB لاگنگ کي فعال ڪيو آهي.

MMAPv1 ۽ وائرڊ ٽائيگر اسٽوريج انجڻ ان کي روڪڻ لاءِ لاگنگ استعمال ڪن ٿا، جيتوڻيڪ وائرڊ ٽائيگر آخري مستقل تائين بحال ٿي سگھي ٿو. ڪنٽرول پوائنٽ، جيڪڏهن لاگنگ بند ٿيل آهي.

جرنلنگ يقيني بڻائي ٿي ته ڊيٽابيس وصولي کان پوءِ هڪ جهڙي حالت ۾ آهي ۽ سڀني ڊيٽا کي برقرار رکي ٿو جيستائين اهو جرنل ڏانهن نه لکيو وڃي. رڪارڊنگ جي تعدد کي پيٽرولر استعمال ڪندي ترتيب ڏني وئي آهي commitIntervalMs.

داخلائن جي پڪ ڪرڻ لاء، پڪ ڪريو ته لاگنگ کي ترتيب ڏيڻ واري فائل ۾ فعال ڪيو ويو آهي (storage.journal.enabled)، ۽ رڪارڊنگ جي تعدد معلومات جي مقدار سان مطابقت رکي ٿي جيڪا توهان وڃائي سگهو ٿا.

انڊيڪس کان سواءِ ترتيب ڏيڻ

جڏهن ڳولها ۽ گڏ ڪرڻ، اتي اڪثر ڊيٽا کي ترتيب ڏيڻ جي ضرورت آهي. اچو ته اميد رکون ته اهو آخري مرحلن مان هڪ تي ڪيو ويو آهي، نتيجن کي فلٽر ڪرڻ کان پوء ترتيب ڏنل ڊيٽا جي مقدار کي گھٽائڻ لاء. ۽ جيتوڻيڪ هن حالت ۾، توهان کي ترتيب ڏيڻ جي ضرورت پوندي اشارو. توهان هڪ واحد يا مرڪب انڊيڪس استعمال ڪري سگهو ٿا.

جيڪڏهن ڪو مناسب انڊيڪس نه آهي، MongoDB ان کان سواء ڪندو. سڀني دستاويزن جي ڪل سائيز تي 32 MB جي ياداشت جي حد آهي ترتيب ڏيڻ جا عمل، ۽ جيڪڏهن MongoDB هن حد تائين پهچي ٿو، پوء اهو يا ته هڪ غلطي اڇلائي يا واپسي ڪندو خالي رڪارڊ سيٽ.

ڳولا انڊيڪس سپورٽ کان سواءِ

ڳولا جا سوال SQL ۾ JOIN آپريشن وانگر ڪم ڪن ٿا. بھترين ڪم ڪرڻ لاءِ، انھن کي ضرورت آھي انڊيڪس جي قيمت جي انڊيڪس جي جيڪا غير ملڪي چاٻي جي طور تي استعمال ٿئي ٿي. اهو واضح ناهي ڇو ته استعمال ۾ ظاهر نه ڪيو ويو آهي explain(). اهڙيون انڊيڪس انڊيڪس کان علاوه آهن جيڪي ان ۾ لکيل آهن explain()، جنهن جي نتيجي ۾ پائپ لائن آپريٽرز استعمال ڪيو ويندو آهي $match и $sort، جڏهن اهي پائپ لائن جي شروعات ۾ ملن ٿا. انڊيڪس هاڻي ڪنهن به اسٽيج کي ڍڪي سگهي ٿو مجموعي پائپ لائن.

گھڻن تازه ڪاريون استعمال ڪرڻ کان ٻاهر نڪرڻ

طريقو db.collection.update() موجوده دستاويز جو حصو يا پوري دستاويز کي تبديل ڪرڻ لاءِ استعمال ڪيو ويو، مڪمل متبادل تائين، توهان جي بيان ڪيل پيٽرولر تي منحصر آهي update. ڇا ايترو واضح ناهي ته اهو مجموعي ۾ سڀني دستاويزن تي عمل نه ڪندو جيستائين توهان اختيار مقرر نه ڪيو multi سڀني دستاويزن کي تازه ڪاري ڪرڻ لاء جيڪي درخواست جي معيار کي پورا ڪن ٿا.

هيش ٽيبل ۾ چابين جي ترتيب جي اهميت کي نه وساريو

JSON ۾، هڪ شئي تي مشتمل هوندو آهي اڻ ترتيب ڏنل مجموعو سائيز صفر يا وڌيڪ نالو/قدر جوڙو، جتي نالو هڪ اسٽرنگ آهي ۽ قيمت هڪ اسٽرنگ، نمبر، بوليان، نال، اعتراض، يا صف آهي.

بدقسمتي سان، BSON آرڊر تي تمام گهڻو زور رکي ٿو جڏهن ڳولا ڪريو. MongoDB ۾، ترتيب ڏنل شيون اندر چابيون جو حڪم ڪم، i.e. { firstname: "Phil", surname: "factor" } - اهو ساڳيو ناهي { { surname: "factor", firstname: "Phil" }. اھو آھي، توھان کي توھان جي دستاويزن ۾ نالو / قدر جوڙو جو آرڊر ذخيرو ڪرڻ گھرجي جيڪڏھن توھان انھن کي ڳولڻ جي پڪ ڪرڻ چاھيو ٿا.

مونجهارو نه ڪريو "خالي" и "اڻ بيان ڪيل"

قدر "اڻ بيان ڪيل" جي مطابق، JSON ۾ ڪڏهن به صحيح نه هو سرڪاري معيار JSON (ECMA-404 سيڪشن 5)، جيتوڻيڪ اهو JavaScript ۾ استعمال ٿئي ٿو. ان کان علاوه، BSON لاء اهو متروڪ آهي ۽ تبديل ڪيو ويو آهي $null، جيڪو هميشه سٺو حل ناهي. استعمال ڪرڻ کان پاسو ڪريو "اڻ بيان ڪيل" MongoDB ۾.

استعمال ڪريو $limit() بغير $sort()

گهڻو ڪري جڏهن توهان MongoDB ۾ ترقي ڪري رهيا آهيو، اهو صرف نتيجو جو هڪ نمونو ڏسڻ لاء مفيد آهي جيڪو سوال يا مجموعي مان واپس ڪيو ويندو. هن ڪم لاء توهان جي ضرورت پوندي $limit()، پر اهو ڪڏهن به حتمي ڪوڊ ۾ نه هجڻ گهرجي جيستائين توهان ان کي استعمال نه ڪريو $sort. هي ميڪيڪل ضروري آهي ڇو ته ٻي صورت ۾ توهان نتيجو جي ترتيب جي ضمانت نه ٿا ڏئي سگهو، ۽ توهان قابل اعتماد طور تي ڊيٽا کي ڏسڻ جي قابل نه هوندا. نتيجي جي چوٽي تي توهان کي ترتيب ڏيڻ جي لحاظ کان مختلف داخلائون ملنديون. قابل اعتماد طريقي سان ڪم ڪرڻ لاءِ، سوالن ۽ مجموعن کي طئي ڪرڻ گهرجي، يعني، هر ڀيري اهي ساڳيون نتيجا پيدا ڪن. ڪوڊ جنهن تي مشتمل آهي $limit()، پر نه $sort، مقرر نه ٿيندو ۽ بعد ۾ غلطين جو سبب بڻجي سگھي ٿو جن کي ٽريڪ ڪرڻ ڏکيو ٿيندو.

ٿڪل

MongoDB سان مايوس ٿيڻ جو واحد طريقو اهو آهي ته ان کي سڌو سنئون ڪنهن ٻئي قسم جي ڊيٽابيس سان، جهڙوڪ ڊي بي ايم ايس، يا ڪجهه اميدن جي بنياد تي استعمال ڪرڻ لاء. اهو هڪ نارنگي کي ڪانٽو سان ڀيٽڻ جهڙو آهي. ڊيٽابيس سسٽم خاص مقصدن جي خدمت ڪن ٿا. اھو بھترين آھي ته توھان پنھنجي لاءِ انھن فرقن کي سمجھو ۽ ان جي تعريف ڪريو. اهو مونگو ڊي بي ڊولپرز تي دٻاءُ وجهڻ لاءِ شرم جوڳو هوندو جنهن رستي تي انهن کي مجبور ڪيو DBMS رستي تي. مان پراڻن مسئلن کي حل ڪرڻ لاءِ نوان ۽ دلچسپ طريقا ڏسڻ چاهيان ٿو، جيئن ڊيٽا جي سالميت کي يقيني بڻائڻ ۽ ڊيٽا سسٽم ٺاهڻ جيڪي ناڪامي ۽ بدسلوڪي حملن لاءِ لچڪدار آهن.

MongoDB جو نسخو 4.0 ۾ ACID ٽرانزيڪشن جو تعارف هڪ جديد طريقي سان اهم سڌارن کي متعارف ڪرائڻ جو هڪ سٺو مثال آهي. ملٽي دستاويزن ۽ گھڻن بيانن جو معاملو ھاڻي ايٽمي آھي. اهو پڻ ممڪن آهي ته لاڪ حاصل ڪرڻ لاءِ گهربل وقت کي ترتيب ڏيو ۽ اڪيلائي واري ٽرانزيڪشن کي ختم ڪيو وڃي، انهي سان گڏ اڪيلائي جي سطح کي تبديل ڪرڻ.

14 شيون مان چاهيان ٿو مونگو ڊي بي سان شروع ڪرڻ کان پهريان مون کي خبر هجي

وڌيڪ پڙهو:

جو ذريعو: www.habr.com

تبصرو شامل ڪريو