এই বিভাগে Firestore Enterprise এডিশনের জন্য ইন্ডেক্সিং সম্পর্কে বর্ণনা করা হয়েছে। Firestore Enterprise এডিশন ডিফল্ট হিসেবে কোনও ইন্ডেক্স তৈরি করে না। খরচ কমাতে এবং ডেটাবেসের পারফর্ম্যান্স উন্নত করতে, আপনার সবচেয়ে বেশি ব্যবহৃত কোয়েরির জন্য ইনডেক্স তৈরি করুন।
ডেটাবেসের পারফর্ম্যান্সের উপর ইন্ডেক্সের বড় প্রভাব থাকে। কোনও কোয়েরির জন্য ইনডেক্স থাকলে, ডেটাবেস স্ক্যান করার জন্য প্রয়োজনীয় ডেটার পরিমাণ কমিয়ে এবং ফলাফল সাজানোর জন্য প্রয়োজনীয় কাজ কমিয়ে, ডেটাবেস দক্ষতার সাথে ফলাফল ফেরত দিতে পারে। তবে, ইনডেক্স এন্ট্রি স্টোরেজের খরচ এবং ইনডেক্স করা ফিল্ডে রাইট অপারেশন চলাকালীন কাজের পরিমাণ বাড়িয়ে দেয়।
ইনডেক্সের সংজ্ঞা ও স্ট্রাকচার
একটি ইনডেক্সে নিম্নলিখিতগুলি থাকে:
- একটি কালেকশন আইডি
- প্রদত্ত সংগ্রহে ফিল্ডের তালিকা
- প্রতিটি ফিল্ডের জন্য একটি ইনডেক্স মোড, হয় ঊর্ধ্বক্রম, অধঃক্রম বা অ্যারে-ধারণ করে
এছাড়াও, কোনও ইনডেক্স স্পার্স বা অনন্য বিকল্প চালু করতে পারে।
ইনডেক্স অর্ডারিং
প্রতিটি ফিল্ডের ক্রম এবং সাজানোর দিকনির্দেশ অনন্যভাবে ইন্ডেক্সকে সংজ্ঞায়িত করে। যেমন, নিম্নলিখিত ইনডেক্সগুলি হল দুটি আলাদা ইনডেক্স এবং এগুলি একে অপরের পরিবর্তে ব্যবহার করা যায় না:
| সংগ্রহ | ফিল্ড |
|---|---|
| শহর | দেশ (ঊর্ধ্বক্রম), জনসংখ্যা (নিম্নক্রম) |
| শহর | জনসংখ্যা (নিম্নক্রম), দেশ (ঊর্ধ্বক্রম), |
কোনও কোয়েরি সাপোর্ট করার জন্য ইন্ডেক্স তৈরি করার সময়, আপনার কোয়েরির মতো একই ক্রমে ফিল্ডগুলি অন্তর্ভুক্ত করুন।
ইনডেক্স ডেনসিটি
ডিফল্ট হিসেবে, ইন্ডেক্স এন্ট্রি কোনও সংগ্রহের সব ডকুমেন্ট থেকে ডেটা স্টোর করে। এটি নন-স্পার্স ইন্ডেক্স নামে পরিচিত। ডকুমেন্টে ইন্ডেক্সে উল্লেখ করা কোনও ফিল্ড থাকুক বা না থাকুক, ডকুমেন্টের জন্য একটি ইন্ডেক্স এন্ট্রি যোগ করা হবে। ইনডেক্স এন্ট্রি তৈরি করার সময়, অস্তিত্বহীন ফিল্ডকে NULL ভ্যালু হিসেবে বিবেচনা করা হয়। এই আচরণ পরিবর্তন করতে, আপনি ইনডেক্সকে স্পার্স ইনডেক্স হিসেবে সংজ্ঞায়িত করতে পারেন।
স্পার্স ইন্ডেক্স
স্পার্স ইনডেক্স শুধুমাত্র সেইসব ডকুমেন্ট ইনডেক্স করে যেগুলি সংগ্রহে থাকে এবং যেগুলিতে ইনডেক্স করা ফিল্ডের মধ্যে অন্তত একটির জন্য ভ্যালু (নাল সহ) থাকে। স্পার্স ইনডেক্স স্টোরেজের খরচ কমায় এবং পারফর্ম্যান্স উন্নত করতে পারে।
অ্যারে-ইনডেক্স রয়েছে
array-contains বা array-contains-any ব্যবহার করে অ্যারে ফিল্ড কোয়েরি করার সময় কোয়েরি পারফর্ম্যান্স অপ্টিমাইজ করতে, আপনি
array-contains মোডে ফিল্ড ইন্ডেক্স করতে পারবেন। একটি ইনডেক্সে সর্বাধিক একটি ফিল্ড
array-contains মোডে থাকতে পারে।
array-contains মোডে একটি অ্যারে ফিল্ড ইন্ডেক্স করার মাধ্যমে, কোয়েরি ইঞ্জিন
নির্দিষ্ট অ্যারে ভ্যালু সহ ডকুমেন্ট দ্রুত খুঁজে পেতে পারে। ইনডেক্স ছাড়া,
কোয়েরি কালেকশনের সম্পূর্ণ স্ক্যান করে অ্যারে ভ্যালু চেক করে,
যার ফলে কালেকশনের সাইজ বাড়ার সাথে সাথে কোয়েরি লেটেন্সি ও রিড করার খরচ
বেড়ে যায়।
অ্যারে ফিল্ড ইন্ডেক্স করতে, ফিল্ডটিকে অবশ্যই নিম্নলিখিত প্রয়োজনীয়তা পূরণ করতে হবে:
- খালি নয় এমন অ্যারে সংক্রান্ত প্রয়োজনীয়তা: ডকুমেন্টে অ্যারে ফিল্ড থাকলে এবং সেটি খালি না হলে, তবেই ইন্ডেক্স এন্ট্রি তৈরি করা হয়। যেসব ডকুমেন্টে মিসিং, নন-অ্যারে বা খালি অ্যারে ফিল্ড আছে সেগুলি ইন্ডেক্স করা হয় না।
ঘনত্ব কীভাবে array-contains ইন্ডেক্সের সাথে সম্পর্কিত
array-contains ফিল্ড অন্তর্ভুক্ত করে এমন ইন্ডেক্সের ক্ষেত্রে, ইন্ডেক্স ডেনসিটি সংক্রান্ত নিয়ম
শুধুমাত্র অর্ডার করা ইন্ডেক্স করা ফিল্ডের ক্ষেত্রে প্রযোজ্য হয়। খালি নয় এমন অ্যারে সংক্রান্ত প্রয়োজনীয়তা
পূরণ করা হলে, ইনডেক্সে বাকি অর্ডার করা ইনডেক্স করা ফিল্ডে
ঘনত্ব সংক্রান্ত নিয়ম প্রযোজ্য হয়:
- নন-স্পার্স ইন্ডেক্স (
DENSE): ডকুমেন্টের জন্য একটি ইন্ডেক্স এন্ট্রি তৈরি করা হয়। ইনডেক্সে কোনও ইনডেক্স করা ফিল্ডের ক্রম না থাকলে, সেটি ইনডেক্স এন্ট্রিতেnullহিসেবে স্টোর করা হয়। - স্পার্স ইন্ডেক্স (
SPARSE): ডকুমেন্টে অর্ডার করা ইন্ডেক্স ফিল্ডের মধ্যে অন্তত একটি থাকলে তবেই ইন্ডেক্স এন্ট্রি তৈরি করা হয়।
উদাহরণ: ইনডেক্স এন্ট্রি জেনারেশন
users (tags[*], status ASC) ইন্ডেক্সটি বিবেচনা করুন:
| দস্তাবেজ | NON-SPARSE ইন্ডেক্স |
SPARSE ইন্ডেক্স |
|---|---|---|
{ |
ইন্ডেক্স করা হয়েছে: • (ট্যাগ: "news", স্ট্যাটাস: "active") |
ইন্ডেক্স করা হয়েছে: • (ট্যাগ: "news", স্ট্যাটাস: "active") |
{ |
ইন্ডেক্স করা হয়েছে: • (ট্যাগ: "news", স্ট্যাটাস: "active") • (ট্যাগ: "sports", স্ট্যাটাস: "active") |
ইন্ডেক্স করা হয়েছে: • (ট্যাগ: "news", স্ট্যাটাস: "active") • (ট্যাগ: "sports", স্ট্যাটাস: "active") |
{ |
ইন্ডেক্স করা হয়েছে: • (ট্যাগ: "news", স্ট্যাটাস: "active") (ডুপ্লিকেট সরানো হয়েছে) |
ইন্ডেক্স করা হয়েছে: • (ট্যাগ: "news", স্ট্যাটাস: "active") (ডুপ্লিকেট সরানো হয়েছে) |
{ |
ইন্ডেক্স করা হয়েছে: • (ট্যাগ: null, স্ট্যাটাস: "active") |
ইন্ডেক্স করা হয়েছে: • (ট্যাগ: null, স্ট্যাটাস: "active") |
{ |
ইন্ডেক্স করা হয়েছে: • (ট্যাগ: "news", স্ট্যাটাস: null) |
ইনডেক্স করা হয়নি (status ফিল্ড নেই) |
{ |
ইন্ডেক্স করা হয়নি (ফিল্ডটি অ্যারে নয়) | ইন্ডেক্স করা হয়নি (ফিল্ডটি অ্যারে নয়) |
{ |
ইন্ডেক্স করা হয়নি (ফিল্ডটি অ্যারে নয়) | ইন্ডেক্স করা হয়নি (ফিল্ডটি অ্যারে নয়) |
{ |
ইনডেক্স করা হয়নি (tags ফিল্ড নেই) |
ইনডেক্স করা হয়নি (tags ফিল্ড নেই) |
{ |
ইন্ডেক্স করা হয়নি (খালি অ্যারে) | ইন্ডেক্স করা হয়নি (খালি অ্যারে) |
কোয়েরির উদাহরণ
ওয়েব
// Query for users where 'tags' contains 'news' and 'status' is 'active' const query = db.collection("users") .where("tags", "array-contains", "news") .where("status", "==", "active"); // Documents returned by the query: // [ // { // "id": "alice", // "tags": ["news", "tech"], // "status": "active" // } // ]
অনন্য ইন্ডেক্স
ইনডেক্স করা ফিল্ডের জন্য অনন্য মান এনফোর্স করতে অনন্য ইনডেক্স বিকল্প সেট করুন। একাধিক ফিল্ডে ইনডেক্সের জন্য, ইনডেক্স জুড়ে ভ্যালুর প্রতিটি কম্বিনেশন অনন্য হতে হবে। ডেটাবেস এমন যেকোনও আপডেট ও ইনসার্ট অপারেশন বাতিল করে দেয় যা ডুপ্লিকেট ভ্যালু সহ ইন্ডেক্স এন্ট্রি তৈরি করার চেষ্টা করে। ইনডেক্স করা ফিল্ডের ডেটায় ডুপ্লিকেট ভ্যালু থাকলে এবং আপনি অনন্য ইনডেক্স তৈরি করার চেষ্টা করলে, ইনডেক্স তৈরি করার প্রসেস সম্পূর্ণ হয় না এবং অপারেশন বিবরণে সমস্যার মেসেজ দেখানো হয়।
অনন্য ইন্ডেক্সে অনুপস্থিত ফিল্ড
আপনি যদি অনন্য সূচকের জন্য অনুপস্থিত ফিল্ড সহ একটি ডকুমেন্ট যোগ করেন, তাহলে সূচকটি
অনুপস্থিত ফিল্ডের জন্য null মান সেট করে। ফলাফল হিসেবে পাওয়া ইন্ডেক্স এন্ট্রি অনন্য হতে হবে
অথবা অপারেশনটি ব্যর্থ হবে।
যেমন, এই ইন্ডেক্সের মাধ্যমে:
| সংগ্রহ | ইন্ডেক্স করা ফিল্ড | কোয়েরির সুযোগ |
|---|---|---|
| শহর | নাম (ঊর্ধ্বক্রম) | সংগ্রহ |
আপনি যদি কালেকশনে {"abbreviation": "LA"} ডকুমেন্ট যোগ করেন, তাহলে অনন্য
ইন্ডেক্স null-এ সেট করা name-এর সাথে একটি এন্ট্রি তৈরি করে। এরপর আপনি যদি
ডকুমেন্ট {"abbreviation": "NYC"} যোগ করার চেষ্টা করেন, তাহলে অপারেশনটি ব্যর্থ হয় কারণ অনন্য সূচকের জন্য ফলাফল
এন্ট্রি একই থাকে।
একাধিক ফিল্ড সহ অনন্য ইন্ডেক্সের ক্ষেত্রেও একই আচরণ প্রযোজ্য হয়।
কোনও ডকুমেন্ট তৈরি বা আপডেট করার সময়, ইন্ডেক্স করা ফিল্ড না থাকলে
সেটি null হিসেবে সেট করা হয় এবং এর ফলে তৈরি হওয়া ইন্ডেক্স এন্ট্রি
ইন্ডেক্সে অনন্য হতে হবে।
অ্যারে ভ্যালুতে অনন্য ইনডেক্স
একটি অনন্য array-contains ইন্ডেক্স ওভারল্যাপ করা অ্যারে এলিমেন্ট সহ
ডকুমেন্টকে নিষিদ্ধ করে।
এই ধরনের ইন্ডেক্স কোনও অ্যারের মধ্যে থাকা একক ডকুমেন্টে অনন্য ভ্যালু আছে কিনা তা এনফোর্স করে না।
যেমন, tags নামের ফিল্ডে অনন্য ইনডেক্স সহ:
নিম্নলিখিত ডকুমেন্ট, doc1, যোগ করার জন্য সঠিক:
{
"tags": [ "news", "tech", "news", "music" ]
}
ইনডেক্স, একটি ডকুমেন্টের একই অ্যারের মধ্যে ডুপ্লিকেট ভ্যালু ("news")
অনুমতি দেয়।
আপনি যদি ডুপ্লিকেট এলিমেন্ট সহ দ্বিতীয় ডকুমেন্ট, doc2, যোগ করার চেষ্টা করেন, তাহলে অপারেশনটি ব্যর্থ হয়:
{
"tags": [ "sports", "music" ]
}
অপারেশনটি ব্যর্থ হয়েছে কারণ "music" ইতিমধ্যেই doc1-এর অ্যারেতে উপস্থিত এবং
ইনডেক্সে ম্যাপ করা হয়েছে।
একটি ডকুমেন্টের একই অ্যারের মধ্যে থাকা এলিমেন্টগুলি অনন্য কিনা তা নিশ্চিত করতে হলে, আপনার অ্যাপ্লিকেশন লজিকে এটি ম্যানেজ করুন।
খালি অ্যারে, অনুপস্থিত ফিল্ড এবং শূন্য মান
সাধারণত, অনন্য ইনডেক্সে অনুপস্থিত ফিল্ডগুলিকে null হিসেবে বিবেচনা করা হয় এবং অবশ্যই
ডকুমেন্ট জুড়ে অনন্য হতে হবে (দেখুন
অনন্য ইনডেক্সে অনুপস্থিত ফিল্ড)।
তবে, অ্যারে ফিল্ডে অনন্য ইন্ডেক্সের জন্য:
- খালি অ্যারে, অনুপস্থিত ফিল্ড এবং স্ট্যান্ডঅ্যালোন নাল: অ্যারে ফিল্ড খালি থাকলে,
সম্পূর্ণ অনুপস্থিত থাকলে অথবা স্ট্যান্ডঅ্যালোন
nullভ্যালু (অ্যারের মধ্যে নয়) থাকলে, ডকুমেন্টের জন্য কোনও ইন্ডেক্স কী তৈরি হয় না। তাই, ডুপ্লিকেট কী সংক্রান্ত সমস্যা ট্রিগার না করেই একাধিক ডকুমেন্টে খালি ফিল্ড বা স্ট্যান্ডঅ্যালোনnullভ্যালু থাকতে পারে। - অ্যারের মধ্যে নাল এলিমেন্ট: অ্যারেতে এলিমেন্ট হিসেবে
nullভ্যালু থাকলে (যেমন,["news", null]),nullএলিমেন্ট ইন্ডেক্স করা হয়। ইনডেক্স করা অ্যারে ফিল্ডেnullএলিমেন্ট আছে এমন পরবর্তী কোনও ডকুমেন্ট ডুপ্লিকেট কী সংক্রান্ত সমস্যার কারণে ব্যর্থ হবে।
ইনডেক্স তৈরি করার সময় হওয়া সমস্যার সমাধান করা
আপনার ইন্ডেক্স ম্যানেজ করার সময় ইন্ডেক্স তৈরি সংক্রান্ত সমস্যা হতে পারে। ডেটাবেসে ডেটা সংক্রান্ত কোনও সমস্যা হলে, ইনডেক্সিং অপারেশন ব্যর্থ হতে পারে। নিম্নলিখিত কারণে ইন্ডেক্সিং অপারেশন ব্যর্থ হতে পারে:
- আপনি ইনডেক্স করার সীমায় পৌঁছে গেছেন। যেমন, অপারেশনটি হয়ত প্রতি ডকুমেন্টে সর্বাধিক সংখ্যক ইন্ডেক্স এন্ট্রিতে পৌঁছে গেছে। ইনডেক্স তৈরি করা না গেলে, আপনি একটি ত্রুটি মেসেজ দেখতে পাবেন। আপনি ইন্ডেক্স সীমায় না পৌঁছে থাকলে, ইন্ডেক্স অপারেশন আবার চেষ্টা করুন।
- আপনি অনন্য ইন্ডেক্স বিকল্প সেট করেছেন এবং ইন্ডেক্স করা ফিল্ডের ডেটা ডুপ্লিকেট ইন্ডেক্স এন্ট্রি তৈরি করবে। এগিয়ে যেতে, ডেটা থেকে ডুপ্লিকেট ভ্যালুর কম্বিনেশন সরিয়ে দিন।
এর পরে কী করতে হবে
কীভাবে ইনডেক্স তৈরি ও ম্যানেজ করবেন তা জানুন।