সরাসরি প্রধান সামগ্রীতে চলে যান

MongoDB ইনডেক্স ব্যবহার করে পারফরম্যান্স অপ্টিমাইজেশন

ইন্ট্রোডাকশন: আমরা যখন ডেটাবেসে প্রচুর ডেটা রাখি, তখন নির্দিষ্ট কোনো তথ্য খুঁজে বের করা অনেক সময় সাপেক্ষ হয়ে দাঁড়ায়। যেমন একটা বিশাল লাইব্রেরিতে হাজার হাজার বইয়ের মধ্যে নির্দিষ্ট একটা বই খোঁজা। এই খোঁজার কাজটিকে দ্রুত করার জন্য 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)

মন্তব্যসমূহ

এই ব্লগটি থেকে জনপ্রিয় পোস্টগুলি

সিজ্জিন (Sijjin) vs ইল্লিয়িন (Illiyin) পার্থক্য Difference

Sijjin (سِجِّين) এবং Illiyin (عِلِّيِّين) —এ দুটি শব্দ কুরআনে এসেছে এবং দুটোই মানুষের আমলনামা সংরক্ষণ সম্পর্কিত স্থানকে নির্দেশ করে। ১. সিজ্জিন (Sijjin) সিজ্জিন হলো পাপীদের (কাফের, মুনাফিক ও দুরাচারীদের) আমলনামা সংরক্ষণের স্থান। এটি সাত তলদেশের নীচে এক কারাগার বা অন্ধকার জগতে অবস্থিত বলে উল্লেখ রয়েছে। সূরা আল-মুতাফফিফীন (৮৩:৭-৯) তে বলা হয়েছে: "كَلَّا إِنَّ كِتَابَ الْفُجَّارِ لَفِي سِجِّينٍ ۝ وَمَا أَدْرَاكَ مَا سِجِّينٌ ۝ كِتَابٌ مَرْقُومٌ" অর্থ: "না, পাপীদের আমলনামা সিজ্জিনে সংরক্ষিত। তুমি কি জানো, সিজ্জিন কী? এটি এক লিখিত দলিল।" সিজ্জিনকে একটি কারাগার, সংকীর্ণ স্থান, বা নিচের স্তরে অবস্থিত এক অন্ধকার দুনিয়া হিসেবে ব্যাখ্যা করা হয়। ২. ইল্লিয়িন (Illiyin) ইল্লিয়িন হলো সৎকর্মশীলদের (মুমিন ও নেককারদের) আমলনামা সংরক্ষণের স্থান । এটি সপ্তম আসমানের ওপরে সংরক্ষিত এক সম্মানিত স্থান। সূরা আল-মুতাফফিফীন (৮৩:১৮-২১) তে বলা হয়েছে: "كَلَّا إِنَّ كِتَابَ الْأَبْرَارِ لَفِي عِلِّيِّينَ ۝ وَمَا أَدْرَاكَ مَا عِلِّيُّونَ ۝ كِتَابٌ مَرْقُومٌ ۝ يَش...

ইমেজ ক্লাসিফিকেশন মডেল তৈরি ও প্রশিক্ষণ

ভূমিকা এই ভিডিওটিতে আমরা দেখবো কিভাবে একটি ইমেজ ক্লাসিফিকেশন মডেলকে প্রশিক্ষণ (Train) দিতে হয়। সহজ কথায়, আমাদের কাছে থাকা ছবিগুলো থেকে কম্পিউটারকে শেখানো যে, কোন ছবিটিতে কোন ব্যক্তি আছেন। এখানে আমরা ডাটাগুলোকে প্রসেস করা, মডেল নির্বাচন, এবং মডেলটি কতটা নির্ভুলভাবে কাজ করছে তা যাচাই করার প্রক্রিয়া শিখবো। ডাটা প্রিপারেশন বা প্রস্তুতি রেফারেন্স: [ 00:00 ] থেকে [ 01:03 ] মডেলকে প্রশিক্ষণ দেওয়ার আগে ডাটা ঠিকঠাক করা খুব জরুরি। ভিডিওতে দেখানো হয়েছে কিভাবে ছবিগুলো থেকে একটি ডিকশনারি বা তালিকার মতো স্ট্রাকচার তৈরি করা হয়েছে। সহজ ব্যাখ্যা: এখানে ইমেজগুলোকে সংখ্যায় রূপান্তর করা হয়েছে। কম্পিউটার সরাসরি ছবি বোঝে না, তাই সেগুলোকে ছোট ছোট ডাটা পয়েন্টের (Array) তালিকা হিসেবে সাজানো হয়েছে। যাতে মডেল বুঝতে পারে একটি ছবিতে কী কী বৈশিষ্ট্য আছে। মডেল নির্বাচন ও প্রশিক্ষণ (SVM) রেফারেন্স: [ 01:03 ] থেকে [ 04:43 ] এখানে Support Vector Machine (SVM) নামক একটি অ্যালগরিদম ব্যবহার করা হয়েছে। এটি সাধারণত ক্লাসিফিকেশনের কাজে খুব ভালো ফলাফল দেয়। পাইপলাইন (Pipeline): ডাটাকে স্কেল (Scale) করার জন্...

জাভা ফিডব্যাক এবং স্ট্রাকচার্ড কনকারেন্সি: বিবর্তনের গল্প

Introduction এই ভিডিওর নির্দিষ্ট অংশে জাভা ল্যাঙ্গুয়েজ আর্কিটেক্ট ব্রায়ান গোয়েটজ (Brian Goetz) আলোচনা করেছেন কীভাবে জাভার নতুন ফিচারগুলো তৈরি হয় এবং এতে সাধারণ ডেভেলপারদের মতামতের গুরুত্ব কতটুকু। বিশেষ করে Structured Concurrency -এর মতো জটিল ফিচারগুলো কেন বারবার 'Preview' অবস্থায় থাকে এবং কীভাবে কমিউনিটির ফিডব্যাক সেই ফিচারগুলোকে আরও নিখুঁত করতে সাহায্য করে, তা এখানে সহজভাবে বোঝানো হয়েছে। ১. ভালো ফিডব্যাক আসলে কী? ভিডিও রেফারেন্স: [ 34:53 ] ব্রায়ান গোয়েটজ বলছেন যে, জাভা টিম যখন কোনো নতুন ফিচারের খসড়া (Draft) বা প্রস্তাব (JEP) প্রকাশ করে, তখন তারা এমন কিছু জানতে চায় যা তারা নিজেরা আগে ভাবেনি। বিস্তারিত: একজন ডেভেলপার হিসেবে আমরা যখন কোনো নতুন ফিচার দেখি, আমাদের প্রথম প্রতিক্রিয়া হয় সেটার Syntax বা লেখার ধরন নিয়ে। কিন্তু ব্রায়ানের মতে, "এই লেখাটা কেন এমন হলো?" বা "এটা কোটলিন বা স্কালা-র মতো কেন নয়?"—এই ধরনের ফিডব্যাক খুব একটা কাজে আসে না। আসল দামী ফিডব্যাক হলো সেইটা, যা নতুন কোনো বাস্তব সমস্যা (Edge Case) তুলে ধরে। আমার চিন্তা: আপনি যদি কেবল দ...