مونگو ڈی بی انڈیکسنگ کے ساتھ سوالات کو کیسے بہتر بنایا جائے۔

Mwngw Y By An Yksng K Sat Swalat Kw Kys B Tr Bnaya Jay



سوال کی رفتار کو بڑھانا MongoDB اور دیگر تمام ڈیٹا بیس سسٹمز کے لیے ضروری ہے۔ اعداد و شمار کے ڈھانچے کی تعمیر سے جو MongoDB کو ریکارڈز کی تیزی سے شناخت کرنے میں مدد کرتا ہے، انڈیکسنگ تلاش کو تیز کرنے اور بہتر بنانے کے لیے ایک طاقتور طریقہ ہے۔ انڈیکسز میں انکوائریوں کو مزید موثر بنانے کے لیے ریکارڈز سے کچھ ڈیٹا کی کاپیاں شامل ہوتی ہیں۔ یہ MongoDB میں درخواستوں کا جواب دینے میں شامل کوششوں کو ہموار کرتا ہے۔ اس گائیڈ میں، ہم مختلف اشاریہ سازی کی اقسام کی مدد سے اشاریہ جات کے استعمال پر تبادلہ خیال کریں گے۔

مجموعہ بنائیں

اشاریہ جات استعمال کرنے سے پہلے، ہمیں اپنے MongoDB میں ایک نیا مجموعہ بنانا ہوگا۔ ہم پہلے ہی ایک بنا چکے ہیں اور 10 دستاویزات داخل کر چکے ہیں، جن کا نام 'ڈمی' ہے۔ Find() MongoDB فنکشن نیچے دی گئی MongoDB شیل اسکرین پر 'Dummy' کلیکشن سے تمام ریکارڈ دکھاتا ہے۔

test> db.Dummy.find()







اشاریہ سازی کی قسم کا انتخاب کریں۔

انڈیکس قائم کرنے سے پہلے، آپ کو پہلے ان کالموں کا تعین کرنا ہوگا جو عام طور پر استفسار کے معیار میں استعمال ہوں گے۔ اشاریہ جات ان کالموں پر اچھی کارکردگی کا مظاہرہ کرتے ہیں جنہیں اکثر فلٹر کیا جاتا ہے، ترتیب دیا جاتا ہے یا تلاش کیا جاتا ہے۔ بڑی کارڈینیلیٹی والے فیلڈز (بہت سی مختلف اقدار) اکثر بہترین اشاریہ سازی کے اختیارات ہوتے ہیں۔ یہاں مختلف انڈیکس کی اقسام کے لیے کوڈ کی کچھ مثالیں ہیں۔



مثال 01: سنگل فیلڈ انڈیکس

یہ ممکنہ طور پر انڈیکس کی سب سے بنیادی قسم ہے، جو اس کالم پر استفسار کی رفتار کو بڑھانے کے لیے ایک کالم کو انڈیکس کرتا ہے۔ اس قسم کا انڈیکس ان سوالات کے لیے استعمال کیا جاتا ہے جس میں آپ کلیکشن ریکارڈز سے استفسار کرنے کے لیے ایک کلیدی فیلڈ استعمال کرتے ہیں۔ فرض کریں کہ آپ ذیل میں فائنڈ فنکشن کے اندر کلیکشن 'ڈمی' کے ریکارڈ کے بارے میں استفسار کرنے کے لیے 'ٹائپ' فیلڈ کا استعمال کرتے ہیں۔ یہ کمانڈ پورے مجموعے کو دیکھے گی، جس پر کارروائی ہونے میں بہت زیادہ وقت لگ سکتا ہے۔ لہذا، ہمیں اس استفسار کی کارکردگی کو بہتر بنانے کی ضرورت ہے۔



test> db.Dummy.find ({type: 'ایم پی' })





مندرجہ بالا ڈمی مجموعہ کے ریکارڈ 'قسم' فیلڈ کا استعمال کرتے ہوئے پائے گئے ہیں یعنی ایک شرط پر مشتمل ہے۔ لہذا، تلاش کے استفسار کو بہتر بنانے کے لیے سنگل کلیدی انڈیکس کو یہاں استعمال کیا جا سکتا ہے۔ لہذا، ہم 'ڈمی' کلیکشن کے 'ٹائپ' فیلڈ پر ایک انڈیکس بنانے کے لیے MongoDB کے CreateIndex() فنکشن کو استعمال کریں گے۔ اس استفسار کو استعمال کرنے کی مثال شیل پر 'type_1' نامی سنگل کلیدی انڈیکس کی کامیاب تخلیق کو دکھاتی ہے۔

test> db.Dummy.createIndex ({ قسم: 1 })

آئیے فائنڈ() استفسار کو ایک بار استعمال کرتے ہیں جب یہ 'ٹائپ' فیلڈ کا استعمال کر لے۔ یہ آپریشن پہلے استعمال شدہ فائنڈ() فنکشن کے مقابلے میں نمایاں طور پر تیز ہوگا کیونکہ انڈیکس اپنی جگہ پر ہے کیونکہ MongoDB درخواست کردہ جاب ٹائٹل کے ساتھ ریکارڈز کو تیزی سے بازیافت کرنے کے لیے انڈیکس کا استعمال کرسکتا ہے۔



test> db.Dummy.find ({type: 'ایم پی' })

مثال 02: کمپاؤنڈ انڈیکس

ہم مخصوص حالات میں مختلف معیارات پر مبنی اشیاء تلاش کرنا چاہتے ہیں۔ ان فیلڈز کے لیے کمپاؤنڈ انڈیکس کو لاگو کرنے سے استفسار کی کارکردگی کو بہتر بنانے میں مدد مل سکتی ہے۔ آئیے کہتے ہیں، اس بار، آپ 'ڈمی' کے مجموعہ سے تلاش کرنا چاہتے ہیں جس میں متعدد فیلڈز کا استعمال کرتے ہوئے مختلف تلاش کی شرائط شامل ہیں جیسا کہ استفسار ظاہر ہوتا ہے۔ یہ استفسار اس مجموعہ سے ریکارڈز تلاش کر رہا ہے جہاں 'ٹائپ' فیلڈ کو 'emp' پر سیٹ کیا گیا ہے اور 'sal' فیلڈ 350 سے زیادہ ہے۔

$gte منطقی آپریٹر کو 'سال' فیلڈ میں شرط لگانے کے لیے استعمال کیا گیا ہے۔ پورے مجموعے کو تلاش کرنے کے بعد کل دو ریکارڈ واپس کیے گئے جو کہ 10 ریکارڈز پر مشتمل ہیں۔

test> db.Dummy.find ({type: 'ایم پی' , sal: {$gte: 350 } })

آئیے مذکورہ سوال کے لیے ایک کمپاؤنڈ انڈیکس بنائیں۔ اس کمپاؤنڈ انڈیکس میں 'قسم' اور 'سال' فیلڈز ہیں۔ نمبر '1' اور '-1' بالترتیب 'قسم' اور 'سال' فیلڈز کے لیے صعودی اور نزولی ترتیب کو ظاہر کرتے ہیں۔ کمپاؤنڈ انڈیکس کے کالموں کی ترتیب اہم ہے اور استفسار کے نمونوں کے مطابق ہونی چاہیے۔ MongoDB نے اس کمپاؤنڈ انڈیکس کو 'type_1_sal_-1' نام دیا ہے جیسا کہ دکھایا گیا ہے۔

test> db.Dummy.createIndex ({ قسم: 1 ، کرے گا:- 1 })

اسی find() استفسار کو استعمال کرنے کے بعد ریکارڈز کو تلاش کرنے کے لیے 'type' فیلڈ ویلیو 'emp' اور 'sal' فیلڈ کی قدر 350 سے زیادہ ہے، ہم نے ترتیب میں معمولی تبدیلی کے ساتھ وہی آؤٹ پٹ حاصل کیا ہے۔ پچھلے سوال کے نتائج کے مقابلے۔ 'سال' فیلڈ کے لیے بڑی قدر کا ریکارڈ اب پہلے نمبر پر ہے، جب کہ سب سے چھوٹا درج بالا کمپاؤنڈ انڈیکس میں 'سال' فیلڈ کے لیے سیٹ کیے گئے '-1' کے مطابق سب سے کم ہے۔

test> db.Dummy.find ({type: 'ایم پی' , sal: {$gte: 350 } })

مثال 03: ٹیکسٹ انڈیکس

بعض اوقات، آپ کو ایسی صورتحال کا سامنا کرنا پڑ سکتا ہے جس میں آپ کو ایک بڑے ڈیٹا سیٹ سے نمٹنا چاہیے، جیسے کہ مصنوعات، اجزاء وغیرہ کی بڑی تفصیل۔ ایک ٹیکسٹ انڈیکس کسی بڑے ٹیکسٹ فیلڈ پر مکمل ٹیکسٹ تلاش کرنے کے لیے مفید ہو سکتا ہے۔ مثال کے طور پر، ہم نے اپنے ٹیسٹ ڈیٹا بیس میں 'ٹیسٹ' کے نام سے ایک نیا مجموعہ بنایا ہے۔ ذیل میں تلاش () استفسار کے مطابق insertMany() فنکشن کا استعمال کرتے ہوئے اس مجموعہ میں کل 6 ریکارڈ داخل کیے ہیں۔

test> db.Test.insertMany([

{نام: 'انا' ، کے: 'وہ لندن میں رہتی ہیں اور ایک اچھی ٹیچر ہیں'

{نام: 'رابرٹ' ، کے: 'وہ اتنا زبردست فٹ بال کھلاڑی ہے'

{نام: 'سے' ، کے: 'شاید دبئی کا سفر کر رہا ہوں'

{نام: 'یعقوب' ، کے: 'وہ ذہین اور امیر ہے۔'

{نام: 'سیلین' ، کے: 'ایک فلم سپر اسٹارٹ کو صرف ایک سیکنڈ میں شہرت ملی'

{نام: 'کین' ، کے: 'کھانے کا شوقین۔ وہ تمہیں بھی کھا سکتی ہے۔' }

])

اب، ہم اس مجموعہ کے 'Des' فیلڈ پر ایک ٹیکسٹ انڈیکس بنائیں گے، جس میں MongoDB کے createIndex() فنکشن کو استعمال کیا جائے گا۔ فیلڈ ویلیو میں مطلوبہ لفظ 'ٹیکسٹ' انڈیکس کی قسم دکھاتا ہے، جو کہ 'ٹیکسٹ' انڈیکس ہے۔ انڈیکس کا نام، des_text، خود بخود تیار ہو گیا ہے۔

test> db.Test.createIndex({ des: 'متن' })

اب، find() فنکشن کو 'des_text' انڈیکس کے ذریعے کلیکشن پر 'ٹیکسٹ سرچ' کرنے کے لیے استعمال کیا گیا ہے۔ $search آپریٹر کو مجموعہ کے ریکارڈ میں لفظ 'food' تلاش کرنے اور اس مخصوص ریکارڈ کو ظاہر کرنے کے لیے استعمال کیا گیا تھا۔

test> db.Test.find({ $text: { $search: 'کھانا' }});

اشاریہ جات کی تصدیق کریں:

آپ اپنے MongoDB میں مختلف مجموعوں کے تمام لاگو کردہ اشاریہ جات کو چیک اور فہرست بنا سکتے ہیں۔ اس کے لیے، اپنے MongoDB شیل اسکرین میں ایک مجموعہ کے نام کے ساتھ getIndexes() طریقہ استعمال کریں۔ ہم نے اس کمانڈ کو 'ٹیسٹ' اور 'ڈمی' کے مجموعوں کے لیے الگ الگ استعمال کیا ہے۔ یہ آپ کی سکرین پر بلٹ ان اور یوزر ڈیفائنڈ انڈیکس سے متعلق تمام ضروری معلومات دکھاتا ہے۔

test> db.Test.getIndexes()

test> db.Dummy.getIndexes()

ڈراپ انڈیکسز:

یہ ان انڈیکسز کو حذف کرنے کا وقت ہے جو پہلے ڈراپ انڈیکس () فنکشن کا استعمال کرتے ہوئے مجموعہ کے لیے بنائے گئے تھے اور اسی فیلڈ نام کے ساتھ انڈیکس کا اطلاق کیا گیا تھا۔ نیچے دی گئی استفسار سے پتہ چلتا ہے کہ سنگل انڈیکس کو ہٹا دیا گیا ہے۔

test> db.Dummy.dropIndex({type: 1 })

اسی طرح کمپاؤنڈ انڈیکس کو گرایا جا سکتا ہے۔

test> db.Dummy.drop index({type: 1 ، کرے گا: 1 })

نتیجہ

MongoDB سے ڈیٹا کی بازیافت کو تیز کرتے ہوئے، سوالات کی کارکردگی کو بڑھانے کے لیے اشاریہ سازی ضروری ہے۔ اشاریہ جات کی کمی کے باعث، MongoDB کو مماثل ریکارڈز کے لیے پورے مجموعہ کو تلاش کرنا چاہیے، جو سیٹ کے سائز میں اضافے کے ساتھ کم موثر ہو جاتا ہے۔ انڈیکس ڈیٹا بیس کے ڈھانچے کو استعمال کرتے ہوئے صحیح ریکارڈز کو تیزی سے دریافت کرنے کی MongoDB کی صلاحیت جب مناسب انڈیکسنگ استعمال کی جاتی ہے تو سوالات کی کارروائی کو تیز کرتی ہے۔