সূচী ওভারভিউ

এই পৃষ্ঠায় Cloud Firestore জন্য ইনডেক্সিং সম্পর্কে বর্ণনা করা হয়েছে। Cloud Firestore ডিফল্টরূপে কোনো ইনডেক্স তৈরি করে না। ডাটাবেসের পারফরম্যান্স উন্নত করতে, আপনার সর্বাধিক ব্যবহৃত কোয়েরিগুলোর জন্য ইনডেক্স তৈরি করুন।

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

সূচকের সংজ্ঞা এবং কাঠামো

একটি সূচকে নিম্নলিখিত বিষয়গুলো থাকে:

  • একটি সংগ্রহ আইডি
  • প্রদত্ত সংগ্রহে থাকা ক্ষেত্রগুলির একটি তালিকা
  • প্রতিটি ক্ষেত্রের জন্য একটি ক্রম, হয় আরোহী অথবা অবরোহী,

একটি ইনডেক্স স্পার্স , মাল্টিকি বা ইউনিক অপশনগুলোও সক্রিয় করতে পারে।

সূচক ক্রম

প্রতিটি ফিল্ডের ক্রম এবং সাজানোর দিক ইনডেক্সটিকে অনন্যভাবে সংজ্ঞায়িত করে। উদাহরণস্বরূপ, নিম্নলিখিত ইনডেক্সগুলো দুটি স্বতন্ত্র ইনডেক্স এবং পরস্পর পরিবর্তনযোগ্য নয়:

সংগ্রহ ক্ষেত্র
শহরগুলি দেশ (আরোহী), জনসংখ্যা (অবরোহী)
শহরগুলি জনসংখ্যা (অবরোহী), দেশ (আরোহী),

কোনো কোয়েরিকে সমর্থন করার জন্য ইনডেক্স তৈরি করার সময়, ফিল্ডগুলোকে আপনার কোয়েরির ক্রমানুসারেই অন্তর্ভুক্ত করুন।

সূচক ঘনত্ব

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

স্পার্স সূচক

একটি স্পার্স ইনডেক্স কালেকশনের শুধুমাত্র সেই ডকুমেন্টগুলোকেই ইনডেক্স করে, যেগুলোতে ইনডেক্স করা ফিল্ডগুলোর অন্তত একটিতে একটি ভ্যালু (নাল সহ) থাকে। একটি স্পার্স ইনডেক্স স্টোরেজ খরচ কমায় এবং পারফরম্যান্স উন্নত করতে পারে।

অ্যারে মানগুলির জন্য মাল্টি-কি সূচক

যদি আপনি এমন কোনো ফিল্ডে ইনডেক্স তৈরি করেন যেখানে অ্যারে ভ্যালু রয়েছে, তাহলে আপনাকে অবশ্যই একটি মাল্টিকি ইনডেক্স তৈরি করতে হবে। একটি সাধারণ ইনডেক্স অ্যারে ভ্যালুকে ইনডেক্স করতে পারে না। একটি মাল্টিকি ইনডেক্স তার সংজ্ঞায় সর্বোচ্চ একটি অ্যারে ফিল্ড সমর্থন করে এবং এটি অ্যারে ভ্যালু ট্র্যাভার্স করার অপারেশনের জন্য ব্যবহার করা যেতে পারে।

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

অ্যারে ভ্যালু এবং মাল্টি-কি ইনডেক্স নিয়ে কাজ করার সময় নিম্নলিখিত পরিস্থিতিগুলোতে ত্রুটি দেখা দেয়:

  • একটি অপারেশন একটি সাধারণ ইনডেক্স দ্বারা সূচিত কোনো ফিল্ডে একটি অ্যারে ভ্যালু যোগ করার চেষ্টা করছে। অ্যারে ভ্যালুটি যোগ করতে হলে, আপনাকে অবশ্যই সেই ফিল্ডের বিদ্যমান সাধারণ ইনডেক্সগুলো মুছে ফেলতে হবে এবং সেগুলোকে মাল্টি-কি ইনডেক্স হিসেবে পুনরায় তৈরি করতে হবে।
  • আপনি এমন একটি ফিল্ডে একটি সাধারণ ইনডেক্স তৈরি করার চেষ্টা করছেন, যেটিতে একটি অ্যারে ভ্যালু রয়েছে। আপনাকে হয় একটি মাল্টি-কি ইনডেক্স তৈরি করতে হবে অথবা অ্যারে ভ্যালুগুলো মুছে ফেলতে হবে।
  • একটি অপারেশন অ্যারে ভ্যালু ব্যবহার করে একাধিক ফিল্ডকে ইনডেক্স করার চেষ্টা করছে। একটি মাল্টিকি ইনডেক্সে অ্যারে ভ্যালু সহ একাধিক ফিল্ড থাকতে পারে না। এগিয়ে যেতে, আপনার ডেটা মডেল বা ইনডেক্স ডেফিনিশনগুলো পরিবর্তন করুন।
  • আপনি একটি মাল্টি-কি ইনডেক্স তৈরি করার চেষ্টা করছেন যেখানে দুটি ফিল্ড পাথের একটি সাধারণ প্রিফিক্স রয়েছে, যেমন users.posts এবং users.zip

অনন্য সূচক

ইনডেক্স করা ফিল্ডগুলোর জন্য অনন্য মান নিশ্চিত করতে ইউনিক ইনডেক্স অপশনটি সেট করুন। একাধিক ফিল্ডের উপর ইনডেক্সের ক্ষেত্রে, প্রতিটি মানের সংমিশ্রণ অবশ্যই ইনডেক্স জুড়ে অনন্য হতে হবে। ডাটাবেস এমন যেকোনো আপডেট এবং ইনসার্ট অপারেশন প্রত্যাখ্যান করে যা ডুপ্লিকেট মান সহ ইনডেক্স এন্ট্রি তৈরি করার চেষ্টা করে। যদি ইনডেক্স করা ফিল্ডগুলোর ডেটাতে ডুপ্লিকেট মান থাকে এবং আপনি একটি ইউনিক ইনডেক্স তৈরি করার চেষ্টা করেন, তাহলে অপারেশন ডিটেইলসে একটি এরর মেসেজ সহ ইনডেক্স বিল্ড ব্যর্থ হবে।

একটি অনন্য সূচকে অনুপস্থিত ক্ষেত্র

যদি আপনি ইউনিক ইনডেক্সের জন্য অনুপস্থিত ফিল্ডসহ কোনো ডকুমেন্ট ইনসার্ট করেন, তাহলে ইনডেক্সটি অনুপস্থিত ফিল্ডগুলোর জন্য null ভ্যালু সেট করে দেয়। ফলস্বরূপ ইনডেক্স এন্ট্রিটি অবশ্যই ইউনিক হতে হবে, অন্যথায় অপারেশনটি ব্যর্থ হয়।

উদাহরণস্বরূপ, এই সূচকটি দিয়ে:

db.cities.createIndex( { "name": 1 }, { unique: true } )

যদি আপনি সংগ্রহে {"abbreviation": "LA"} ডকুমেন্টটি যোগ করেন, তাহলে ইউনিক ইনডেক্সটি name null সেট করে একটি এন্ট্রি তৈরি করে। এরপর যদি আপনি {"abbreviation": "NYC"} ডকুমেন্টটি যোগ করার চেষ্টা করেন, তাহলে অপারেশনটি ব্যর্থ হয়, কারণ ইউনিক ইনডেক্সের জন্য তৈরি হওয়া এন্ট্রিটি একই থাকে।

একাধিক ফিল্ডযুক্ত ইউনিক ইনডেক্সের ক্ষেত্রেও একই আচরণ প্রযোজ্য। কোনো ডকুমেন্ট তৈরি বা আপডেট করার সময়, অনুপস্থিত ইনডেক্সড ফিল্ডগুলোকে null সেট করা হয় এবং ফলস্বরূপ ইনডেক্স এন্ট্রিটি অবশ্যই ইনডেক্সের মধ্যে অনন্য হতে হবে।

টিটিএল সূচক

আপনার ডাটাবেস থেকে অপ্রচলিত ডেটা স্বয়ংক্রিয়ভাবে মুছে ফেলার জন্য টিটিএল (TTL) ইনডেক্স ব্যবহার করুন। একটি টিটিএল ইনডেক্স কোনো নির্দিষ্ট কালেকশনের ডকুমেন্টগুলোর জন্য একটি নির্দিষ্ট ফিল্ডকে মেয়াদোত্তীর্ণের সময় হিসেবে নির্ধারণ করে। টিটিএল-এর মাধ্যমে, আপনি অপ্রচলিত ডেটা পরিষ্কার করে স্টোরেজ খরচ কমাতে পারেন। ডেটা সাধারণত তার মেয়াদোত্তীর্ণ হওয়ার ২৪ ঘণ্টার মধ্যে মুছে ফেলা হয়।

ইনডেক্স তৈরির ত্রুটি সমাধান করুন

আপনার ইনডেক্সগুলো পরিচালনা করার সময় আপনি ইনডেক্স তৈরির ত্রুটির সম্মুখীন হতে পারেন। ডাটাবেসে ডেটা নিয়ে কোনো সমস্যা দেখা দিলে একটি ইনডেক্সিং অপারেশন ব্যর্থ হতে পারে। নিম্নলিখিত কারণগুলোর জন্য ইনডেক্সিং অপারেশন ব্যর্থ হতে পারে:

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

এরপর কী?