ইন্ট্রোডাকশন: আমরা যখন ডেটাবেসে প্রচুর ডেটা রাখি, তখন নির্দিষ্ট কোনো তথ্য খুঁজে বের করা অনেক সময় সাপেক্ষ হয়ে দাঁড়ায়। যেমন একটা বিশাল লাইব্রেরিতে হাজার হাজার বইয়ের মধ্যে নির্দিষ্ট একটা বই খোঁজা। এই খোঁজার কাজটিকে দ্রুত করার জন্য MongoDB-তে Index ব্যবহার করা হয়। আজকের এই ভিডিও অংশে [51:50] থেকে [56:07] পর্যন্ত ইনডেক্স কী, এটি কীভাবে কাজ করে এবং এর সুবিধা ও অসুবিধা নিয়ে আলোচনা করা হয়েছে।
১. ইনডেক্স (Index) কী?
ইনডেক্স হলো ডেটাবেসের একটি বিশেষ ব্যবস্থা যা নির্দিষ্ট কোনো ফিল্ডের ডেটা দ্রুত খুঁজে পেতে সাহায্য করে। এটি মূলত একটি B-Tree (Balanced Tree) ডেটা স্ট্রাকচার ব্যবহার করে ডেটা সাজিয়ে রাখে।
কন্টেন্ট রেফারেন্স: [52:00]
সহজ ব্যাখ্যা: সহজভাবে বললে, ইনডেক্স হলো বইয়ের শেষের দিকে থাকা 'সূচিপত্র' বা 'ইন্ডেক্স' পেইজের মতো। আপনি যদি পুরো বই না পড়ে সরাসরি সূচিপত্র দেখে নির্দিষ্ট টপিক বের করেন, তবে আপনার সময় কম লাগবে। ডেটাবেসের ক্ষেত্রেও ঠিক তাই ঘটে।
২. ইনডেক্স ছাড়া এবং ইনডেক্স সহ খোঁজার পার্থক্য
ভিডিওতে 'Larry' নামের একজন স্টুডেন্টকে খুঁজে বের করার উদাহরণ দেওয়া হয়েছে।
ইনডেক্স ছাড়া অবস্থা: যখন ইনডেক্স থাকে না, তখন MongoDB Linear Search বা এক এক করে সব ডকুমেন্ট চেক করে। যদি ১ লাখ ডেটা থাকে, তবে তাকে ১ লাখ বারই চেক করতে হতে পারে।
JavaScript
db.students.find({name: "Larry"}).explain("execution_stats")
ব্যাখ্যা: এই কোডটি দিয়ে দেখা যায় MongoDB কতগুলো ডকুমেন্ট চেক করেছে। ইনডেক্স না থাকলে এটি ৫টি ডকুমেন্টের মধ্যে ৫টিই চেক করে ল্যারিকে খুঁজে পায়।
ইনডেক্স সহ অবস্থা: যখন আমরা নামের ওপর ইনডেক্স তৈরি করি, তখন MongoDB সরাসরি ওই তথ্যটি কোথায় আছে তা জেনে যায়।
JavaScript
// ইনডেক্স তৈরি করার কমান্ড
db.students.createIndex({name: 1})
ব্যাখ্যা: এখানে name: 1 মানে হলো নামগুলোকে ছোট থেকে বড় (A-Z) ক্রমে সাজিয়ে একটি ইনডেক্স তৈরি করা। এখন আবার ল্যারিকে খুঁজলে দেখা যাবে MongoDB ৫টির বদলে মাত্র ১টি ডকুমেন্ট চেক করেই তাকে পেয়ে গেছে।
কন্টেন্ট রেফারেন্স: [52:27] - [54:15]
৩. ইনডেক্স ম্যানেজমেন্ট (দেখানো এবং ডিলিট করা)
আপনার কালেকশনে কী কী ইনডেক্স আছে তা দেখা এবং প্রয়োজন ফুরিয়ে গেলে তা মুছে ফেলার উপায় এখানে দেখানো হয়েছে।
ইনডেক্স দেখার কোড:
JavaScript
db.students.getIndexes()
ব্যাখ্যা: এটি আপনার কালেকশনে থাকা সব ইনডেক্সের লিস্ট দেখাবে। ডিফল্টভাবে _id এর ওপর সবসময় একটি ইনডেক্স থাকে।
ইনডেক্স ডিলিট করার কোড:
JavaScript
db.students.dropIndex("name_1")
ব্যাখ্যা: name_1 হলো ইনডেক্সটির নাম। এই কমান্ড দিলে ওই ইনডেক্সটি মুছে যাবে।
কন্টেন্ট রেফারেন্স: [54:31] - [55:08]
৪. MongoDB Compass ব্যবহার করে ইনডেক্স তৈরি
যারা কোড লিখতে পছন্দ করেন না, তারা চাইলে গ্রাফিক্যাল ইন্টারফেস বা Compass ব্যবহার করেও ইনডেক্স বানাতে পারেন। এর জন্য Indexes ট্যাবে গিয়ে 'Create Index' বাটনে ক্লিক করতে হয়।
কন্টেন্ট রেফারেন্স: [55:17]
এনালাইসিস এবং আমার মতামত
কন্টেন্ট ক্রিয়েটর এখানে খুব স্পষ্টভাবে বোঝাতে চেয়েছেন যে, ইনডেক্স যেমন পারফরম্যান্স বাড়ায়, তেমনি এর কিছু "ট্রেড-অফ" (Trade-off) বা নেতিবাচক দিক আছে।
-
সুবিধা: ডেটা খোঁজার গতি (Search Query) বহুগুণ বাড়িয়ে দেয়।
-
অসুবিধা: ইনডেক্স মেমরিতে জায়গা নেয়। এছাড়া যখনই আপনি নতুন ডেটা ইনসার্ট করবেন বা আপডেট করবেন, তখন ডেটাবেসকে ইনডেক্সটিও আপডেট করতে হয়, যা রাইটিং অপারেশনকে কিছুটা ধীর করে দেয়।
পরামর্শ: বাস্তব জীবনে আপনার এমন ফিল্ডেই ইনডেক্স করা উচিত যেগুলোতে আপনি ঘনঘন সার্চ করেন (যেমন ইমেইল, ইউজারনেম), কিন্তু সেই ফিল্ডের ডেটা বারবার আপডেট হয় না। সব ফিল্ডে ইনডেক্স করলে উল্টো ডেটাবেসের পারফরম্যান্স কমে যেতে পারে।
বিকল্প ব্যবস্থা: যদি আপনার ডেটা অনেক বেশি হয়, তবে শুধুমাত্র ইনডেক্স দিয়ে হবে না, তখন আপনাকে Sharding বা Caching (Redis) এর মতো উন্নত টেকনিক ব্যবহারের কথা চিন্তা করতে হবে।
[
Learn MongoDB in 1 hour 🍃
Bro Code · 1.7M views
](http://www.youtube.com/watch?v=c2M-rlkkT5o)

মন্তব্যসমূহ
একটি মন্তব্য পোস্ট করুন
আপনার সমস্যাটি কমেন্ট করে আমাদের জানান :-d