Django

⌘K
  1. Home
  2. Django
  3. Django তে কিভাবে কাজ করতে...
  4. Speed Optimization
  5. (ডাটাবেস অপ্টিমাইজেশন) index

(ডাটাবেস অপ্টিমাইজেশন) index

ধরুন, আপনি একটি ই-কমার্স ওয়েবসাইটের মালিক যেখানে বিভিন্ন প্রোডাক্টের লিস্ট রয়েছে। আপনার কাছে Product নামে একটি ডাটাবেস টেবিল আছে যাতে হাজার হাজার পণ্য রয়েছে। Product টেবিলের প্রতিটি প্রোডাক্টে name, category, price, এবং অন্যান্য ফিল্ড আছে।

Step 1: Index ছাড়া ডাটাবেস সার্চ করা

আপনার Product টেবিলের উপর কোনো index নেই। এখন, কেউ যদি আপনার ওয়েবসাইটে “Laptop” নামক প্রোডাক্টটি সার্চ করে, তখন Django কে ডাটাবেসে name ফিল্ডের ভেতরে “Laptop” খুঁজে বের করতে হবে।

Product.objects.filter(name="Laptop")

এখানে, Django ডাটাবেসকে বলে, “Product টেবিলের প্রতিটি row এর name ফিল্ড চেক কর এবং name="Laptop" যেটা আছে সেটা দেখাও।” অর্থাৎ ডাটাবেস sequentially প্রতিটি row চেক করবে।

বাস্তব সমস্যাঃ

যদি টেবিলে ১০০টি প্রোডাক্ট থাকে, তবে হয়তো কোনো সমস্যা হবে না। কিন্তু, যদি টেবিলে ১০ লক্ষ প্রোডাক্ট থাকে, তাহলে ডাটাবেসকে প্রতিটি row একে একে চেক করতে হবে, যা অনেক সময় নেবে এবং আপনার ওয়েবসাইট ধীর হয়ে যাবে।

Step 2: Index ব্যবহার করে ডাটাবেস সার্চ করা

এখন আপনি সিদ্ধান্ত নিলেন, name ফিল্ডে একটি index তৈরি করবেন। Django মডেল ফিল্ডে index যোগ করতে হলে কোড হবে এ রকম:

class Product(models.Model):
    name = models.CharField(max_length=100, db_index=True)  # index যোগ করা হয়েছে
    category = models.CharField(max_length=50)
    price = models.DecimalField(max_digits=10, decimal_places=2)

এবার Django যখন ডাটাবেসে “Laptop” সার্চ করবে, তখন পুরো টেবিল স্ক্যান না করেও সরাসরি index থেকে তথ্য পাবে।

কিভাবে কাজ করে?

index ফিল্ডটি একটি আলাদা ডেটা স্ট্রাকচার তৈরি করে, যা name ফিল্ডের ডেটাগুলোকে sort করে রাখে। এর ফলে, যখন ডাটাবেস “Laptop” খুঁজবে, তখন পুরো টেবিল স্ক্যান না করেই সরাসরি index থেকে খুঁজে বের করতে পারবে।

Step 3: Index এর ব্যবহার ও না করার পার্থক্য

Index না করলে কি হবে?

  1. ধীরগতির সার্চ: টেবিলের প্রতিটি row sequentially চেক করতে হবে।
  2. ওয়েবসাইট স্লো: ডাটাবেস ধীরে কাজ করবে, বিশেষ করে বড় ডাটাসেট হলে ওয়েবসাইট ধীরগতির হয়ে যাবে।
  3. High CPU & RAM ব্যবহার: প্রতিটি row স্ক্যান করার জন্য বেশি রিসোর্স প্রয়োজন।

Index করলে কি হবে?

  1. দ্রুত সার্চ: index ফিল্ডে দ্রুত ফলাফল পাওয়া যায়।
  2. ওয়েবসাইট দ্রুত: বড় ডাটাবেসেও দ্রুত সার্চ করা সম্ভব, ওয়েবসাইটের পারফরম্যান্স উন্নত হবে।
  3. Low CPU & RAM ব্যবহার: কম রিসোর্স ব্যবহার করে দ্রুত তথ্য খুঁজে পাওয়া যায়।

বাস্তব উদাহরণ সংক্ষেপে

ধরুন, আপনার বন্ধু আপনাকে একটি ১০০০ পৃষ্ঠার বই থেকে “কম্পিউটার” শব্দটি খুঁজে দিতে বললো। যদি বইয়ের শেষে একটি index থাকে যেখানে “কম্পিউটার” শব্দটির পৃষ্ঠা নম্বর লেখা আছে, তাহলে আপনি সরাসরি সেই পৃষ্ঠা দেখতে পারেন। কিন্তু index না থাকলে, আপনাকে একে একে পুরো বইয়ের প্রতিটি পৃষ্ঠা দেখতে হবে, যা সময়সাপেক্ষ।

Django ডাটাবেসেও index ঠিক এভাবেই কাজ করে। index থাকলে দ্রুত নির্দিষ্ট তথ্য খুঁজে পাওয়া যায়, আর না থাকলে ডাটাবেসকে পুরো টেবিল স্ক্যান করতে হয়, যা অনেক বেশি সময় নেয়।

Django এর দৃষ্টিকোণ থেকে Index সংক্ষেপে

  • কোড: db_index=True দিয়ে ফিল্ডে index তৈরি।
  • ব্যবহার করলে: দ্রুত সার্চ এবং ওয়েবসাইট পারফরম্যান্স ভালো।
  • ব্যবহার না করলে: ধীর সার্চ, বেশি রিসোর্স ব্যবহার এবং পারফরম্যান্সের অবনতি।

How can we help?