মঙ্গোডিবি ইনডেক্সিংয়ের মাধ্যমে কীভাবে প্রশ্নগুলি উন্নত করবেন

Mangodibi Inadeksinyera Madhyame Kibhabe Prasnaguli Unnata Karabena



মঙ্গোডিবি এবং অন্যান্য সমস্ত ডাটাবেস সিস্টেমের জন্য কোয়েরির গতি বৃদ্ধি করা অপরিহার্য। ডেটা স্ট্রাকচার তৈরি করে যা MongoDB-কে আরও দ্রুত রেকর্ড শনাক্ত করতে সাহায্য করে, ইন্ডেক্সিং হল অনুসন্ধানের গতি বাড়ানো এবং অপ্টিমাইজ করার একটি শক্তিশালী পদ্ধতি। অনুসন্ধানগুলিকে আরও কার্যকর করার জন্য রেকর্ড থেকে কিছু ডেটার অনুলিপি সূচীগুলি অন্তর্ভুক্ত করে। এটি মঙ্গোডিবি-তে অনুরোধের প্রতিক্রিয়া জানাতে জড়িত প্রচেষ্টাকে প্রবাহিত করে। এই নির্দেশিকাতে, আমরা বিভিন্ন ধরনের সূচীকরণের সাহায্যে সূচির ব্যবহার নিয়ে আলোচনা করব।

সংগ্রহ তৈরি করুন

সূচী ব্যবহার করার আগে, আমাদের মঙ্গোডিবিতে একটি নতুন সংগ্রহ তৈরি করতে হবে। আমরা ইতিমধ্যে একটি তৈরি করেছি এবং 10টি নথি সন্নিবেশিত করেছি, যার নাম 'ডামি'। Find() MongoDB ফাংশন নীচের MongoDB শেল স্ক্রিনে 'ডামি' সংগ্রহ থেকে সমস্ত রেকর্ড প্রদর্শন করে।

পরীক্ষা> db.Dummy.find()







ইনডেক্সিং টাইপ নির্বাচন করুন

একটি সূচী স্থাপন করার আগে, আপনাকে প্রথমে কলামগুলি নির্ধারণ করতে হবে যা সাধারণত ক্যোয়ারী মাপদণ্ডে ব্যবহার করা হবে। সূচীগুলি প্রায়শই ফিল্টার করা, বাছাই করা বা অনুসন্ধান করা কলামগুলিতে ভাল কাজ করে। একটি বড় কার্ডিনালিটি (অনেক ভিন্ন মান) সহ ক্ষেত্রগুলি প্রায়শই চমৎকার সূচীকরণ বিকল্প। এখানে বিভিন্ন সূচক ধরনের জন্য কিছু কোড উদাহরণ আছে.



উদাহরণ 01: একক ক্ষেত্র সূচক

এটি সম্ভবত সবচেয়ে মৌলিক ধরনের সূচক, যা সেই কলামে অনুসন্ধানের গতি বাড়াতে একটি একক কলামকে সূচী করে। এই ধরনের সূচকটি এমন প্রশ্নের জন্য ব্যবহার করা হয় যেখানে আপনি সংগ্রহের রেকর্ডগুলি অনুসন্ধান করতে একটি একক কী ক্ষেত্র ব্যবহার করেন। অনুমান করুন যে আপনি নীচের মত ফাইন্ড ফাংশনের মধ্যে 'ডামি' সংগ্রহের রেকর্ডগুলি অনুসন্ধান করতে 'টাইপ' ক্ষেত্রটি ব্যবহার করেন। এই কমান্ডটি পুরো সংগ্রহটি দেখবে, যা বিশাল সংগ্রহগুলি প্রক্রিয়া করতে দীর্ঘ সময় নিতে পারে। অতএব, আমাদের এই প্রশ্নের কর্মক্ষমতা অপ্টিমাইজ করতে হবে।



test> db.Dummy.find({টাইপ: 'এমপি' })





উপরের ডামি সংগ্রহের রেকর্ডগুলি 'টাইপ' ফিল্ড ব্যবহার করে পাওয়া গেছে যেমন একটি শর্ত রয়েছে। অতএব, অনুসন্ধান ক্যোয়ারী অপ্টিমাইজ করতে এখানে একক-কী সূচক ব্যবহার করা যেতে পারে। সুতরাং, আমরা 'ডামি' সংগ্রহের 'টাইপ' ক্ষেত্রে একটি সূচক তৈরি করতে MongoDB-এর createIndex() ফাংশন ব্যবহার করব। এই ক্যোয়ারীটি ব্যবহার করার দৃষ্টান্তটি শেলটিতে 'type_1' নামে একটি একক-কী সূচকের সফল সৃষ্টি প্রদর্শন করে।

test> db.Dummy.createIndex({ প্রকার: 1 })

'টাইপ' ক্ষেত্রটি ব্যবহার করে লাভ করার পরে আসুন find() ক্যোয়ারীটি ব্যবহার করি। পূর্বে ব্যবহৃত find() ফাংশনের তুলনায় অপারেশনটি এখন উল্লেখযোগ্যভাবে দ্রুত হবে কারণ সূচকটি রয়েছে কারণ MongoDB অনুরোধকৃত কাজের শিরোনাম সহ রেকর্ডগুলি দ্রুত পুনরুদ্ধার করতে সূচকটি ব্যবহার করতে পারে।



test> db.Dummy.find({টাইপ: 'এমপি' })

উদাহরণ 02: যৌগিক সূচক

আমরা নির্দিষ্ট পরিস্থিতিতে বিভিন্ন মানদণ্ডের উপর ভিত্তি করে আইটেমগুলি সন্ধান করতে চাই। এই ক্ষেত্রগুলির জন্য একটি যৌগিক সূচক প্রয়োগ করা ক্যোয়ারী কর্মক্ষমতা উন্নত করতে সাহায্য করতে পারে। ধরা যাক, এইবার, আপনি অনুসন্ধান করতে চান 'ডামি' সংগ্রহ থেকে অনুসন্ধান করতে চান একাধিক ক্ষেত্র ব্যবহার করে বিভিন্ন সার্চিং শর্ত সহ ক্যোয়ারী প্রদর্শিত হয়। এই ক্যোয়ারীটি সংগ্রহ থেকে রেকর্ডের জন্য অনুসন্ধান করা হয়েছে যেখানে 'টাইপ' ক্ষেত্রটি 'emp' তে সেট করা হয়েছে এবং 'sal' ক্ষেত্রটি 350-এর বেশি।

$gte লজিক্যাল অপারেটর 'সাল' ক্ষেত্রে শর্ত প্রয়োগ করতে ব্যবহার করা হয়েছে। 10টি রেকর্ড সমন্বিত সমগ্র সংগ্রহে অনুসন্ধান করার পর মোট দুটি রেকর্ড ফেরত দেওয়া হয়েছে।

test> db.Dummy.find({টাইপ: 'এমপি' , সাল: {$gte: 350 } })

পূর্বোক্ত প্রশ্নের জন্য একটি যৌগিক সূচক তৈরি করা যাক। এই যৌগিক সূচকে 'টাইপ' এবং 'সাল' ক্ষেত্র রয়েছে। সংখ্যা '1' এবং '-1' যথাক্রমে 'টাইপ' এবং 'সাল' ক্ষেত্রের জন্য আরোহী এবং অবরোহ ক্রম উপস্থাপন করে। যৌগিক সূচকের কলামগুলির ক্রম গুরুত্বপূর্ণ এবং ক্যোয়ারী প্যাটার্নের সাথে মিলিত হওয়া উচিত। MongoDB এই যৌগিক সূচকটিকে 'type_1_sal_-1' নাম দিয়েছে।

test> db.Dummy.createIndex({ প্রকার: 1 , ইচ্ছাশক্তি:- 1 })

একই find() ক্যোয়ারী ব্যবহার করে রেকর্ড অনুসন্ধান করার জন্য 'টাইপ' ফিল্ডের মান 'emp' হিসাবে এবং 'sal' ফিল্ডের মান 350 এর চেয়ে বেশি, আমরা অর্ডারে সামান্য পরিবর্তনের সাথে একই আউটপুট পেয়েছি। পূর্ববর্তী প্রশ্নের ফলাফলের তুলনায়। 'সাল' ক্ষেত্রের জন্য বৃহত্তর মান রেকর্ডটি এখন প্রথম স্থানে রয়েছে, যখন উপরের যৌগিক সূচকে 'সাল' ক্ষেত্রের জন্য সেট করা '-1' অনুসারে সবচেয়ে ছোটটি সর্বনিম্ন।

test> db.Dummy.find({টাইপ: 'এমপি' , সাল: {$gte: 350 } })

উদাহরণ 03: টেক্সট ইনডেক্স

কখনও কখনও, আপনি এমন একটি পরিস্থিতির সম্মুখীন হতে পারেন যেখানে আপনার একটি বড় ডেটা সেটের সাথে মোকাবিলা করা উচিত, যেমন পণ্যের বড় বিবরণ, উপাদান ইত্যাদি৷ একটি টেক্সট ইনডেক্স একটি বড় টেক্সট ফিল্ডে ফুল-টেক্সট অনুসন্ধান করার জন্য দরকারী হতে পারে৷ উদাহরণস্বরূপ, আমরা আমাদের পরীক্ষার ডাটাবেসের মধ্যে 'পরীক্ষা' নামে একটি নতুন সংগ্রহ তৈরি করেছি। নিচের find() ক্যোয়ারী অনুযায়ী insertMany() ফাংশন ব্যবহার করে এই সংগ্রহে মোট 6টি রেকর্ড সন্নিবেশ করা হয়েছে।

test> db.Test.insertMany([

{নাম: 'আনা' , এর: 'তিনি লন্ডনে থাকেন এবং একজন ভালো শিক্ষক' },

{নাম: 'রবার্ট' , এর: 'তিনি একজন দুর্দান্ত ফুটবল খেলোয়াড়' },

{নাম: 'থেকে' , এর: 'হয়তো দুবাই ভ্রমণ করছেন' },

{নাম: 'জ্যাকব' , এর: 'তিনি মনপ্রাণ ও ধনী।' },

{নাম: 'সিলিয়ান' , এর: 'একটি মুভি সুপার স্টার্ট মাত্র কয়েক সেকেন্ডের মধ্যে খ্যাতি পেয়েছে' },

{নাম: 'কেন' , এর: 'খাদ্য প্রেমিকা। সে তোমাকেও খেতে পারে।' }

])

এখন, আমরা MongoDB-এর createIndex() ফাংশন নিযুক্ত করে এই সংগ্রহের 'Des' ক্ষেত্রে একটি পাঠ্য সূচক তৈরি করব। ক্ষেত্রের মানের মধ্যে 'টেক্সট' কীওয়ার্ডটি একটি সূচকের ধরন প্রদর্শন করে, যা একটি 'টেক্সট' সূচক। ইনডেক্স নাম, des_text, স্বয়ংক্রিয়ভাবে তৈরি করা হয়েছে।

test> db.Test.createIndex({ des: 'পাঠ্য' })

এখন, find() ফাংশনটি 'des_text' সূচকের মাধ্যমে সংগ্রহে 'টেক্সট-সার্চ' সম্পাদন করতে ব্যবহার করা হয়েছে। সংগ্রহের রেকর্ডে 'খাদ্য' শব্দটি অনুসন্ধান করতে এবং সেই নির্দিষ্ট রেকর্ডটি প্রদর্শন করতে $সার্চ অপারেটর ব্যবহার করা হয়েছিল।

test> db.Test.find({ $text: { $search: 'খাদ্য' }});

সূচী যাচাই করুন:

আপনি আপনার MongoDB-তে বিভিন্ন সংগ্রহের সমস্ত প্রয়োগকৃত সূচী পরীক্ষা করে তালিকাভুক্ত করতে পারেন। এর জন্য, আপনার MongoDB শেল স্ক্রিনে একটি সংগ্রহের নামের সাথে getIndexes() পদ্ধতিটি ব্যবহার করুন। আমরা এই কমান্ডটি 'পরীক্ষা' এবং 'ডামি' সংগ্রহের জন্য আলাদাভাবে ব্যবহার করেছি। এটি আপনার স্ক্রিনে অন্তর্নির্মিত এবং ব্যবহারকারী-সংজ্ঞায়িত সূচক সম্পর্কিত সমস্ত প্রয়োজনীয় তথ্য দেখায়।

পরীক্ষা> db.Test.getIndexes()

পরীক্ষা> db.Dummy.getIndexes()

ড্রপ ইনডেক্স:

সূচকটি প্রয়োগ করা হয়েছিল একই ক্ষেত্রের নামের সাথে dropIndex() ফাংশন ব্যবহার করে সংগ্রহের জন্য আগে তৈরি করা সূচীগুলি মুছে ফেলার সময় এসেছে। নীচের প্রশ্নটি দেখায় যে একক সূচকটি সরানো হয়েছে।

test> db.Dummy.dropIndex({টাইপ: 1 })

একইভাবে, যৌগিক সূচক বাদ দেওয়া যেতে পারে।

test> db.Dummy.drop index({type: 1 , ইচ্ছাশক্তি: 1 })

উপসংহার

MongoDB থেকে ডেটা পুনরুদ্ধারকে ত্বরান্বিত করে, কোয়েরির দক্ষতা বাড়ানোর জন্য ইন্ডেক্সিং অপরিহার্য। ইনডেক্সের অভাব থাকায়, MongoDB-কে অবশ্যই রেকর্ডের মিলের জন্য পুরো সংগ্রহটি অনুসন্ধান করতে হবে, যা সেটের আকার বাড়ার সাথে সাথে কম কার্যকর হয়। সূচক ডাটাবেস কাঠামো ব্যবহার করে সঠিক রেকর্ডগুলি দ্রুত আবিষ্কার করার মঙ্গোডিবি ক্ষমতা যখন উপযুক্ত সূচী ব্যবহার করা হয় তখন প্রশ্নের প্রক্রিয়াকরণের গতি বাড়িয়ে দেয়।