ক্লাউড ফায়ারস্টোরে সূচকের ধরন

সূচীগুলি একটি ডাটাবেসের কর্মক্ষমতার একটি গুরুত্বপূর্ণ ফ্যাক্টর। অনেকটা একটি বইয়ের সূচির মতো যা একটি বইয়ের বিষয়গুলিকে পৃষ্ঠা নম্বরে ম্যাপ করে, একটি ডাটাবেস সূচক একটি ডাটাবেসের আইটেমগুলিকে ডাটাবেসের মধ্যে তাদের অবস্থানের সাথে মানচিত্র করে। আপনি যখন একটি ডাটাবেসকে একটি ক্যোয়ারী পাঠান, তখন ডাটাবেস আপনার অনুরোধ করা আইটেমগুলির অবস্থানগুলি দ্রুত দেখতে একটি সূচক ব্যবহার করতে পারে।

এই পৃষ্ঠাটি ক্লাউড ফায়ারস্টোর ব্যবহার করে এমন দুটি ধরণের সূচী বর্ণনা করে, একক-ক্ষেত্র সূচী এবং যৌগিক সূচী

প্রতিটি প্রশ্নের পিছনে একটি সূচক

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

কম সূচক ব্যবস্থাপনা, আরও অ্যাপ বিকাশ

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

সূচক প্রকার

ক্লাউড ফায়ারস্টোর দুটি ধরণের সূচক ব্যবহার করে: একক-ক্ষেত্র এবং যৌগিক । সূচীকৃত ক্ষেত্রের সংখ্যা ছাড়াও, একক-ক্ষেত্র এবং যৌগিক সূচীগুলি আপনি কীভাবে পরিচালনা করেন তার মধ্যে পার্থক্য রয়েছে।

একক-ক্ষেত্র সূচক

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

স্বয়ংক্রিয় সূচীকরণ

ডিফল্টরূপে, ক্লাউড ফায়ারস্টোর স্বয়ংক্রিয়ভাবে একটি নথিতে প্রতিটি ক্ষেত্রের জন্য একক-ক্ষেত্রের সূচী এবং একটি মানচিত্রের প্রতিটি সাবফিল্ড বজায় রাখে। ক্লাউড ফায়ারস্টোর একক-ক্ষেত্র সূচীগুলির জন্য নিম্নলিখিত ডিফল্ট সেটিংস ব্যবহার করে:

  • প্রতিটি নন-অ্যারে এবং নন-ম্যাপ ফিল্ডের জন্য, ক্লাউড ফায়ারস্টোর দুটি সংগ্রহ-স্কোপ একক-ক্ষেত্র সূচী সংজ্ঞায়িত করে, একটি ঊর্ধ্বমুখী মোডে এবং একটি অবরোহী মোডে।

  • প্রতিটি মানচিত্র ক্ষেত্রের জন্য, ক্লাউড ফায়ারস্টোর মানচিত্রে প্রতিটি নন-অ্যারে এবং নন-ম্যাপ সাবফিল্ডের জন্য একটি সংগ্রহ-স্কোপের আরোহী সূচক এবং একটি অবরোহ সূচক তৈরি করে।

  • একটি নথিতে প্রতিটি অ্যারে ক্ষেত্রের জন্য, ক্লাউড ফায়ারস্টোর একটি সংগ্রহ-স্কোপ অ্যারে-ধারণ সূচক তৈরি করে এবং বজায় রাখে।

  • সংগ্রহ গ্রুপ সুযোগ সহ একক-ক্ষেত্র সূচী ডিফল্টরূপে রক্ষণাবেক্ষণ করা হয় না।

একক-ক্ষেত্র সূচক ছাড়

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

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

একক-ক্ষেত্র সূচক ছাড় তৈরি এবং পরিচালনা করতে, ক্লাউড ফায়ারস্টোরে সূচক পরিচালনা দেখুন।

যৌগিক সূচক

একটি যৌগিক সূচক একটি সংগ্রহের সমস্ত নথির একটি সাজানো ম্যাপিং সঞ্চয় করে, সূচীতে ক্ষেত্রগুলির একটি আদেশকৃত তালিকার উপর ভিত্তি করে।

ক্লাউড ফায়ারস্টোর একক-ক্ষেত্র সূচী দ্বারা সমর্থিত নয় এমন প্রশ্নের সমর্থন করার জন্য যৌগিক সূচী ব্যবহার করে।

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

আপনি যদি প্রথমে প্রয়োজনীয় সূচক তৈরি না করে উপরের ক্যোয়ারীটি করার চেষ্টা করেন, তাহলে Cloud Firestore একটি ত্রুটি বার্তা প্রদান করে যেখানে একটি লিঙ্ক রয়েছে যা আপনি অনুপস্থিত সূচক তৈরি করতে অনুসরণ করতে পারেন। আপনি একটি সূচক দ্বারা সমর্থিত নয় এমন একটি প্রশ্নের চেষ্টা করার সময় এটি ঘটে। আপনি কনসোল ব্যবহার করে বা Firebase CLI ব্যবহার করে ম্যানুয়ালি যৌগিক সূচকগুলি সংজ্ঞায়িত এবং পরিচালনা করতে পারেন। যৌগিক সূচক তৈরি এবং পরিচালনার বিষয়ে আরও জানতে, সূচক পরিচালনা দেখুন।

সূচক মোড এবং ক্যোয়ারী স্কোপ

আপনি একক-ক্ষেত্র এবং যৌগিক সূচীগুলি আলাদাভাবে কনফিগার করেন, তবে উভয়ের জন্যই আপনার সূচীগুলির জন্য সূচক মোড এবং ক্যোয়ারী স্কোপগুলি কনফিগার করা প্রয়োজন।

সূচক মোড

আপনি যখন একটি সূচক সংজ্ঞায়িত করেন, আপনি প্রতিটি সূচিবদ্ধ ক্ষেত্রের জন্য একটি সূচক মোড নির্বাচন করেন। প্রতিটি ক্ষেত্রের সূচক মোড সেই ক্ষেত্রের নির্দিষ্ট ক্যোয়ারী ক্লজ সমর্থন করে। আপনি নিম্নলিখিত সূচক মোড থেকে নির্বাচন করতে পারেন:

সূচক মোড বর্ণনা
আরোহী < , <= , == , >= , > , != , in , এবং not-in , ক্ষেত্রের ক্যোয়ারী ক্লজ সমর্থন করে এবং এই ক্ষেত্রের মানের উপর ভিত্তি করে ক্রমবর্ধমান ক্রমে ফলাফল বাছাই সমর্থন করে।
নিচের দিকে নেমে < , <= , == , >= , > , != , in , এবং নট not-in ক্যোয়ারী ক্লজগুলিকে ক্ষেত্রে সমর্থন করে এবং এই ক্ষেত্রের মানের উপর ভিত্তি করে ক্রমানুসারে ফলাফল বাছাই সমর্থন করে৷
অ্যারে-এ রয়েছে array-contains করে এবং array-contains-any প্রশ্নের ধারা সমর্থন করে।

কোয়েরির সুযোগ

প্রতিটি সূচক একটি সংগ্রহ বা একটি সংগ্রহ গোষ্ঠীর মধ্যে বিস্তৃত। এটি সূচকের ক্যোয়ারী স্কোপ হিসাবে পরিচিত:

সংগ্রহের সুযোগ
ক্লাউড ফায়ারস্টোর ডিফল্টরূপে সংগ্রহের সুযোগ সহ সূচী তৈরি করে। এই সূচীগুলি এমন প্রশ্নগুলিকে সমর্থন করে যা একটি একক সংগ্রহ থেকে ফলাফল প্রদান করে৷

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

ইন্ডেক্সিং উদাহরণ

আপনার জন্য স্বয়ংক্রিয়ভাবে একক-ক্ষেত্রের সূচী তৈরি করে, ক্লাউড ফায়ারস্টোর আপনার অ্যাপ্লিকেশনটিকে সবচেয়ে প্রাথমিক ডেটাবেস প্রশ্নগুলিকে দ্রুত সমর্থন করার অনুমতি দেয়৷ একক-ক্ষেত্রের সূচীগুলি আপনাকে ক্ষেত্রের মান এবং তুলনাকারী < , <= , == , >= , > , এবং in এর উপর ভিত্তি করে সহজ প্রশ্নগুলি সম্পাদন করতে দেয়। অ্যারে ক্ষেত্রগুলির জন্য, তারা আপনাকে array-contains করে এবং array-contains-any প্রশ্নগুলি সম্পাদন করার অনুমতি দেয়।

ব্যাখ্যা করার জন্য, সূচক তৈরির দৃষ্টিকোণ থেকে নিম্নলিখিত উদাহরণগুলি পরীক্ষা করুন। নিম্নলিখিত স্নিপেটটি একটি cities সংগ্রহে কয়েকটি city নথি তৈরি করে এবং প্রতিটি নথির জন্য name , state , country , capital , population এবং tags ক্ষেত্র সেট করে:

ওয়েব
var citiesRef = db.collection("cities");

citiesRef.doc("SF").set({
    name: "San Francisco", state: "CA", country: "USA",
    capital: false, population: 860000,
    regions: ["west_coast", "norcal"] });
citiesRef.doc("LA").set({
    name: "Los Angeles", state: "CA", country: "USA",
    capital: false, population: 3900000,
    regions: ["west_coast", "socal"] });
citiesRef.doc("DC").set({
    name: "Washington, D.C.", state: null, country: "USA",
    capital: true, population: 680000,
    regions: ["east_coast"] });
citiesRef.doc("TOK").set({
    name: "Tokyo", state: null, country: "Japan",
    capital: true, population: 9000000,
    regions: ["kanto", "honshu"] });
citiesRef.doc("BJ").set({
    name: "Beijing", state: null, country: "China",
    capital: true, population: 21500000,
    regions: ["jingjinji", "hebei"] });

ডিফল্ট স্বয়ংক্রিয় সূচীকরণ সেটিংস অনুমান করে, ক্লাউড ফায়ারস্টোর নন-অ্যারে ফিল্ড প্রতি একটি ঊর্ধ্বমুখী একক-ক্ষেত্র সূচক, নন-অ্যারে ক্ষেত্র প্রতি একটি অবতরণ একক-ক্ষেত্র সূচক এবং অ্যারে ক্ষেত্রের জন্য একটি অ্যারে-ধারণ করে একক-ক্ষেত্র সূচক আপডেট করে। নিম্নলিখিত টেবিলের প্রতিটি সারি একটি একক-ক্ষেত্র সূচকে একটি এন্ট্রি প্রতিনিধিত্ব করে:

সংগ্রহ ক্ষেত্র সূচীকৃত প্রশ্নের সুযোগ
শহরগুলি নাম সংগ্রহ
শহরগুলি অবস্থা সংগ্রহ
শহরগুলি দেশ সংগ্রহ
শহরগুলি মূলধন সংগ্রহ
শহরগুলি জনসংখ্যা সংগ্রহ
শহরগুলি নাম সংগ্রহ
শহরগুলি অবস্থা সংগ্রহ
শহরগুলি দেশ সংগ্রহ
শহরগুলি মূলধন সংগ্রহ
শহরগুলি জনসংখ্যা সংগ্রহ
শহরগুলি array-contains সংগ্রহ

একক-ক্ষেত্র সূচী দ্বারা সমর্থিত প্রশ্নগুলি

এই স্বয়ংক্রিয়ভাবে তৈরি একক-ক্ষেত্র সূচী ব্যবহার করে, আপনি নিম্নলিখিত মত সহজ প্রশ্ন চালাতে পারেন:

ওয়েব
const stateQuery = citiesRef.where("state", "==", "CA");
const populationQuery = citiesRef.where("population", "<", 100000);
const nameQuery = citiesRef.where("name", ">=", "San Francisco");

এছাড়াও in সমতা এবং যৌগিক সমতা ( == ) প্রশ্ন তৈরি করতে পারেন:

ওয়েব
citiesRef.where('country', 'in', ["USA", "Japan", "China"])

// Compound equality queries
citiesRef.where("state", "==", "CO").where("name", "==", "Denver")
citiesRef.where("country", "==", "USA")
         .where("capital", "==", false)
         .where("state", "==", "CA")
         .where("population", "==", 860000)

আপনি যদি একটি যৌগিক ক্যোয়ারী চালাতে চান যা একটি পরিসর তুলনা ব্যবহার করে ( < , <= , > , বা >= ) বা যদি আপনাকে একটি ভিন্ন ক্ষেত্র অনুসারে বাছাই করতে হয়, তাহলে আপনাকে অবশ্যই সেই প্রশ্নের জন্য একটি যৌগিক সূচক তৈরি করতে হবে।

array-contains সূচী আপনাকে regions অ্যারে ক্ষেত্রটি অনুসন্ধান করতে দেয়:

ওয়েব
citiesRef.where("regions", "array-contains", "west_coast")
// array-contains-any and array-contains use the same indexes
citiesRef.where("regions", "array-contains-any", ["west_coast", "east_coast"])

সমন্বিত সূচী দ্বারা সমর্থিত প্রশ্ন

ক্লাউড ফায়ারস্টোর একক-ক্ষেত্র সূচী দ্বারা সমর্থিত নয় এমন যৌগিক প্রশ্নগুলিকে সমর্থন করার জন্য যৌগিক সূচী ব্যবহার করে। উদাহরণস্বরূপ, নিম্নলিখিত প্রশ্নের জন্য আপনার একটি যৌগিক সূচকের প্রয়োজন হবে:

ওয়েব
citiesRef.where("country", "==", "USA").orderBy("population", "asc")
citiesRef.where("country", "==", "USA").where("population", "<", 3800000)
citiesRef.where("country", "==", "USA").where("population", ">", 690000)
// in and == clauses use the same index
citiesRef.where("country", "in", ["USA", "Japan", "China"])
         .where("population", ">", 690000)

এই প্রশ্নগুলির জন্য নীচের যৌগিক সূচক প্রয়োজন৷ যেহেতু ক্যোয়ারীটি country ক্ষেত্রের জন্য একটি সমতা ( == বা in ) ব্যবহার করে, আপনি এই ক্ষেত্রের জন্য একটি ঊর্ধ্বমুখী বা অবরোহ সূচক মোড ব্যবহার করতে পারেন। ডিফল্টরূপে, অসমতা ধারাগুলি অসমতার ধারায় ক্ষেত্রের উপর ভিত্তি করে একটি ক্রমবর্ধমান ক্রম প্রয়োগ করে।

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

একই ক্যোয়ারী চালানোর জন্য কিন্তু একটি অবরোহী বাছাই ক্রম সহ, আপনার population জন্য নিচের দিকের একটি অতিরিক্ত যৌগিক সূচক প্রয়োজন:

ওয়েব
citiesRef.where("country", "==", "USA").orderBy("population", "desc")

citiesRef.where("country", "==", "USA")
         .where("population", "<", 3800000)
         .orderBy("population", "desc")

citiesRef.where("country", "==", "USA")
         .where("population", ">", 690000)
         .orderBy("population", "desc")

citiesRef.where("country", "in", ["USA", "Japan", "China"])
         .where("population", ">", 690000)
         .orderBy("population", "desc")
সংগ্রহ ক্ষেত্রগুলি সূচীকৃত প্রশ্নের সুযোগ
শহরগুলি দেশ, জনসংখ্যা সংগ্রহ
শহরগুলি দেশ , জনসংখ্যা সংগ্রহ

অতিরিক্ত ধারার সাথে একটি array-contains করে বা array-contains-any কোয়েরি একত্রিত করতে আপনাকে একটি যৌগিক সূচক তৈরি করতে হবে।

ওয়েব
citiesRef.where("regions", "array-contains", "east_coast")
         .where("capital", "==", true)

// array-contains-any and array-contains use the same index
citiesRef.where("regions", "array-contains-any", ["west_coast", "east_coast"])
         .where("capital", "==", true)
সংগ্রহ ক্ষেত্রগুলি সূচীকৃত প্রশ্নের সুযোগ
শহরগুলি অ্যারে-তে ট্যাগ রয়েছে , (বা ) ক্যাপিটাল সংগ্রহ

সংগ্রহ গ্রুপ সূচী দ্বারা সমর্থিত প্রশ্ন

সংগ্রহের গোষ্ঠীর সুযোগ সহ একটি সূচক প্রদর্শন করতে, কল্পনা করুন আপনি city কিছু নথিতে একটি landmarks সাব-সংগ্রহ যোগ করেছেন:

ওয়েব
var citiesRef = db.collection("cities");

citiesRef.doc("SF").collection("landmarks").doc().set({
    name: "Golden Gate Bridge",
    category : "bridge" });
citiesRef.doc("SF").collection("landmarks").doc().set({
    name: "Golden Gate Park",
    category : "park" });

citiesRef.doc("DC").collection("landmarks").doc().set({
    name: "National Gallery of Art",
    category : "museum" });
citiesRef.doc("DC").collection("landmarks").doc().set({
    name: "National Mall",
    category : "park" });

সংগ্রহের সুযোগ সহ নিম্নলিখিত একক-ক্ষেত্র সূচক ব্যবহার করে, আপনি category ক্ষেত্রের উপর ভিত্তি করে একটি একক শহরের landmarks সংগ্রহ অনুসন্ধান করতে পারেন:

সংগ্রহ ক্ষেত্রগুলি সূচীকৃত প্রশ্নের সুযোগ
ল্যান্ডমার্ক (বা ) বিভাগ সংগ্রহ
ওয়েব
citiesRef.doc("SF").collection("landmarks").where("category", "==", "park")
citiesRef.doc("SF").collection("landmarks").where("category", "in", ["park", "museum"])

এখন, কল্পনা করুন যে আপনি সমস্ত শহর জুড়ে ল্যান্ডমার্ক অনুসন্ধান করতে আগ্রহী। সমস্ত landmarks সংগ্রহ সমন্বিত সংগ্রহের গোষ্ঠীতে এই ক্যোয়ারীটি চালানোর জন্য, আপনাকে সংগ্রহের গোষ্ঠীর সুযোগ সহ একটি landmarks একক-ক্ষেত্র সূচক সক্রিয় করতে হবে:

সংগ্রহ ক্ষেত্রগুলি সূচীকৃত প্রশ্নের সুযোগ
ল্যান্ডমার্ক (বা ) বিভাগ সংগ্রহ গ্রুপ

এই সূচীটি সক্ষম করে, আপনি landmarks সংগ্রহ গোষ্ঠীকে জিজ্ঞাসা করতে পারেন:

ওয়েব
var landmarksGroupRef = db.collectionGroup("landmarks");

landmarksGroupRef.where("category", "==", "park")
landmarksGroupRef.where("category", "in", ["park", "museum"])

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

উদাহরণস্বরূপ, আপনি একটি অতিরিক্ত সূচী সক্রিয় না করে নিম্নলিখিত সংগ্রহ গোষ্ঠী কোয়েরি চালাতে পারেন:

ওয়েব
db.collectionGroup("landmarks").get()

সূচক এন্ট্রি

আপনার প্রোজেক্টের কনফিগার করা সূচীগুলি, সেইসাথে একটি নথির গঠন, উভয়ই নথির জন্য সূচক এন্ট্রিগুলিকে প্রভাবিত করে, যা শেষ পর্যন্ত সূচক এন্ট্রি গণনা সীমার দিকে গণনা করে৷

এখানে ব্যাখ্যা করার জন্য একটি উদাহরণ।

দলিল

name : "San Francisco"
temperatures : {summer: 67, winter: 55}
neighborhoods : ["Mission", "Downtown", "Marina"]

একক-ক্ষেত্র সূচক

  • (স্বয়ংক্রিয়) নাম ASC এবং DESC
  • (স্বয়ংক্রিয়) তাপমাত্রা ASC এবং DESC
  • (স্বয়ংক্রিয়) আশেপাশের অ্যারে ধারণ করে

কম্পোজিট ইনডেক্স

  • নাম ASC, পাড়ার ASC
  • নাম DESC, পাড়ার ASC

ফলাফল সূচক এন্ট্রি

এই ইন্ডেক্সিং কনফিগারেশনের ফলে ডকুমেন্টের জন্য নিম্নলিখিত 12টি ইনডেক্স এন্ট্রি পাওয়া যায়:

সূচক প্রবেশ
নাম ASC এবং DESC নাম: "সান ফ্রান্সিসকো"
তাপমাত্রা ASC এবং DESC তাপমাত্রা. গ্রীষ্ম: 67
তাপমাত্রা ASC এবং DESC তাপমাত্রা শীতকাল: 55
আশেপাশের অ্যারে ধারণ করে প্রতিবেশী: "মিশন"
আশেপাশের অ্যারে ধারণ করে আশেপাশের এলাকা: "ডাউনটাউন"
আশেপাশের অ্যারে ধারণ করে প্রতিবেশী: "মারিনা"
নাম ASC, পাড়ার ASC নাম: "সান ফ্রান্সিসকো", আশেপাশের এলাকা: "মিশন"
নাম ASC, পাড়ার ASC নাম: "সান ফ্রান্সিসকো", আশেপাশের এলাকা: "ডাউনটাউন"
নাম ASC, পাড়ার ASC নাম: "সান ফ্রান্সিসকো", আশেপাশের এলাকা: "মারিনা"
নাম DESC, পাড়ার ASC নাম: "সান ফ্রান্সিসকো", আশেপাশের এলাকা: "মিশন"
নাম DESC, পাড়ার ASC নাম: "সান ফ্রান্সিসকো", আশেপাশের এলাকা: "ডাউনটাউন"
নাম DESC, পাড়ার ASC নাম: "সান ফ্রান্সিসকো", আশেপাশের এলাকা: "মারিনা"

সূচক এবং মূল্য নির্ধারণ

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

সূচক একীভূত সুবিধা গ্রহণ

যদিও ক্লাউড ফায়ারস্টোর প্রতিটি প্রশ্নের জন্য একটি সূচক ব্যবহার করে, এটি অগত্যা প্রতি ক্যোয়ারীতে একটি সূচকের প্রয়োজন হয় না। একাধিক সমতা ( == ) ধারা সহ প্রশ্নের জন্য এবং, ঐচ্ছিকভাবে, একটি orderBy ধারা, ক্লাউড ফায়ারস্টোর বিদ্যমান সূচীগুলি পুনরায় ব্যবহার করতে পারে৷ ক্লাউড ফায়ারস্টোর বৃহত্তর সমতা প্রশ্নের জন্য প্রয়োজনীয় যৌগিক সূচক তৈরি করতে সাধারণ সমতা ফিল্টারের জন্য সূচীগুলিকে একত্রিত করতে পারে।

আপনি সূচক একত্রিতকরণের সুবিধা নিতে পারেন এমন পরিস্থিতিতে সনাক্ত করে সূচকের খরচ কমাতে পারেন। উদাহরণস্বরূপ, একটি রেস্টুরেন্ট রেটিং অ্যাপের জন্য একটি restaurants সংগ্রহ কল্পনা করুন:

  • রেস্তোরাঁ

    • বার্গারথাইম

      name : "Burger Thyme"
      category : "burgers"
      city : "San Francisco"
      editors_pick : true
      star_rating : 4

এখন, কল্পনা করুন এই অ্যাপটি নীচের মত প্রশ্নগুলি ব্যবহার করে৷ লক্ষ্য করুন যে অ্যাপটি category , city এবং সম্পাদকদের_পিক-এর জন্য সমতা ধারার সমন্বয় ব্যবহার করে যখন সর্বদা ঊর্ধ্বগামী editors_pick star_rating করে:

ওয়েব
db.collection("restaurants").where("category", "==", "burgers")
                            .orderBy("star_rating")

db.collection("restaurants").where("city", "==", "San Francisco")
                            .orderBy("star_rating")

db.collection("restaurants").where("category", "==", "burgers")
                            .where("city", "==", "San Francisco")
                            .orderBy("star_rating")

db.collection("restaurants").where("category", "==", "burgers")
                            .where("city", "==" "San Francisco")
                            .where("editors_pick", "==", true )
                            .orderBy("star_rating")

আপনি প্রতিটি প্রশ্নের জন্য একটি সূচক তৈরি করতে পারেন:

সংগ্রহ ক্ষেত্রগুলি সূচীকৃত প্রশ্নের সুযোগ
রেস্টুরেন্ট বিভাগ, star_rating সংগ্রহ
রেস্টুরেন্ট city, star_rating সংগ্রহ
রেস্টুরেন্ট বিভাগ, city, star_rating সংগ্রহ
রেস্টুরেন্ট বিভাগ, city, editors_pick, star_rating সংগ্রহ

একটি ভাল সমাধান হিসাবে, আপনি ক্লাউড ফায়ারস্টোরের সমতা ধারাগুলির জন্য সূচীগুলি একত্রিত করার ক্ষমতার সুবিধা গ্রহণ করে সূচকের সংখ্যা হ্রাস করতে পারেন:

সংগ্রহ ক্ষেত্রগুলি সূচীকৃত প্রশ্নের সুযোগ
রেস্টুরেন্ট বিভাগ, star_rating সংগ্রহ
রেস্টুরেন্ট city, star_rating সংগ্রহ
রেস্টুরেন্ট editors_pick, star_rating সংগ্রহ

সূচীগুলির এই সেটটি কেবল ছোট নয়, এটি একটি অতিরিক্ত ক্যোয়ারী সমর্থন করে:

ওয়েব
db.collection("restaurants").where("editors_pick", "==", true)
                            .orderBy("star_rating")

ইন্ডেক্সিং সীমা

নিম্নলিখিত সীমা সূচী প্রযোজ্য. সমস্ত কোটা এবং সীমার জন্য, কোটা এবং সীমা দেখুন।

সীমা বিস্তারিত
একটি ডাটাবেসের জন্য সর্বাধিক সংখ্যক যৌগিক সূচক 200
একটি ডাটাবেসের জন্য একক-ক্ষেত্র কনফিগারেশনের সর্বাধিক সংখ্যা

200

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

প্রতিটি নথির জন্য সর্বাধিক সংখ্যক সূচক এন্ট্রি

40,000

সূচক এন্ট্রির সংখ্যা হল একটি নথির জন্য নিম্নলিখিতগুলির সমষ্টি:

  • একক-ক্ষেত্র সূচক এন্ট্রির সংখ্যা
  • কম্পোজিট ইনডেক্স এন্ট্রির সংখ্যা

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

একটি সূচক এন্ট্রির সর্বোচ্চ আকার

7.5 KiB

ক্লাউড ফায়ারস্টোর কীভাবে সূচক এন্ট্রি আকার গণনা করে তা দেখতে, সূচক এন্ট্রি আকার দেখুন।

একটি ডকুমেন্টের ইনডেক্স এন্ট্রির মাপের সর্বোচ্চ যোগফল

8 MiB

মোট আকার হল একটি নথির জন্য নিম্নলিখিতগুলির সমষ্টি:

  • একটি নথির একক-ক্ষেত্রের সূচকের এন্ট্রির আকারের সমষ্টি৷
  • একটি নথির কম্পোজিট ইনডেক্স এন্ট্রির আকারের সমষ্টি৷
  • একটি ইন্ডেক্স করা ক্ষেত্রের মানের সর্বোচ্চ আকার

    1500 বাইট

    1500 বাইটের বেশি ক্ষেত্রের মানগুলি কাটা হয়েছে৷ ছেঁটে দেওয়া ক্ষেত্রের মান জড়িত প্রশ্নগুলি অসঙ্গত ফলাফল দিতে পারে।

    সূচীকরণের সেরা অনুশীলন

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

    মামলা বর্ণনা
    বড় স্ট্রিং ক্ষেত্র

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

    ক্রমিক মান সহ নথি সমন্বিত একটি সংগ্রহে উচ্চ লেখার হার

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

    একটি উচ্চ লেখার হার সহ একটি IoT ব্যবহারের ক্ষেত্রে, উদাহরণস্বরূপ, একটি টাইমস্ট্যাম্প ফিল্ড সহ নথি সমন্বিত একটি সংগ্রহ প্রতি সেকেন্ডে 500 রাইটের কাছে যেতে পারে।

    বড় অ্যারে বা মানচিত্র ক্ষেত্র

    বড় অ্যারে বা মানচিত্র ক্ষেত্রগুলি প্রতি নথিতে 40,000 সূচক এন্ট্রির সীমার কাছে যেতে পারে। যদি আপনি একটি বড় অ্যারে বা মানচিত্র ক্ষেত্রের উপর ভিত্তি করে অনুসন্ধান না করেন, তাহলে আপনার এটিকে সূচীকরণ থেকে অব্যাহতি দেওয়া উচিত।