Catch up on highlights from Firebase at Google I/O 2023. Learn more

Cloud Firestore में अनुक्रमणिका प्रकार

डेटाबेस के प्रदर्शन में इंडेक्स एक महत्वपूर्ण कारक हैं। किसी पुस्तक के अनुक्रमणिका की तरह, जो किसी पुस्तक के विषयों को पृष्ठ संख्या में मानचित्रित करता है, एक डेटाबेस अनुक्रमणिका डेटाबेस में आइटम्स को डेटाबेस में उनके स्थानों पर मैप करती है। जब आप एक डेटाबेस को एक प्रश्न भेजते हैं, तो डेटाबेस आपके द्वारा अनुरोधित वस्तुओं के स्थानों को जल्दी से देखने के लिए एक अनुक्रमणिका का उपयोग कर सकता है।

यह पृष्ठ उन दो प्रकार के इंडेक्स का वर्णन करता है जिनका उपयोग क्लाउड फायरस्टार करता है, सिंगल-फ़ील्ड इंडेक्स और कंपोजिट इंडेक्स

हर क्वेरी के पीछे एक इंडेक्स

यदि किसी क्वेरी के लिए कोई अनुक्रमणिका मौजूद नहीं है, तो अधिकांश डेटाबेस आइटम द्वारा उनकी सामग्री के माध्यम से क्रॉल करते हैं, एक धीमी प्रक्रिया जो डेटाबेस के बढ़ने पर और भी धीमी हो जाती है। क्लाउड फायरस्टार सभी प्रश्नों के लिए अनुक्रमणिका का उपयोग करके उच्च क्वेरी प्रदर्शन की गारंटी देता है। नतीजतन, क्वेरी प्रदर्शन परिणाम सेट के आकार पर निर्भर करता है और डेटाबेस में आइटम्स की संख्या पर नहीं।

कम अनुक्रमणिका प्रबंधन, अधिक ऐप विकास

Cloud Firestore में ऐसी विशेषताएं शामिल हैं जो इंडेक्स को प्रबंधित करने में लगने वाले समय को कम करती हैं। सबसे बुनियादी प्रश्नों के लिए आवश्यक अनुक्रमणिका आपके लिए स्वचालित रूप से बनाई जाती हैं। जब आप अपने ऐप का उपयोग और परीक्षण करते हैं, तो क्लाउड फायरस्टोर आपके ऐप के लिए आवश्यक अतिरिक्त इंडेक्स की पहचान करने और बनाने में आपकी सहायता करता है।

सूचकांक प्रकार

Cloud Firestore दो तरह के इंडेक्स का इस्तेमाल करता है: सिंगल-फ़ील्ड और कंपोज़िट । इंडेक्स किए गए फ़ील्ड की संख्या के अलावा, सिंगल-फ़ील्ड और कंपोजिट इंडेक्स अलग-अलग होते हैं कि आप उन्हें कैसे प्रबंधित करते हैं।

सिंगल-फ़ील्ड इंडेक्स

एकल-फ़ील्ड अनुक्रमणिका किसी विशिष्ट फ़ील्ड वाले संग्रह में सभी दस्तावेज़ों की क्रमबद्ध मैपिंग संग्रहीत करती है। एकल-फ़ील्ड अनुक्रमणिका में प्रत्येक प्रविष्टि किसी विशिष्ट फ़ील्ड के लिए दस्तावेज़ का मान और डेटाबेस में दस्तावेज़ का स्थान रिकॉर्ड करती है। क्लाउड फायरस्टार इन इंडेक्स का उपयोग कई बुनियादी प्रश्नों को करने के लिए करता है। आप अपने डेटाबेस की स्वचालित अनुक्रमण सेटिंग्स और अनुक्रमणिका छूट को कॉन्फ़िगर करके एकल-फ़ील्ड अनुक्रमणिका प्रबंधित करते हैं।

स्वचालित अनुक्रमण

डिफ़ॉल्ट रूप से, क्लाउड फायरस्टार स्वचालित रूप से दस्तावेज़ में प्रत्येक फ़ील्ड और मानचित्र में प्रत्येक सबफ़ील्ड के लिए एकल-फ़ील्ड इंडेक्स बनाए रखता है। Cloud Firestore सिंगल-फ़ील्ड इंडेक्स के लिए नीचे दी गई डिफ़ॉल्ट सेटिंग का इस्तेमाल करता है:

  • प्रत्येक गैर-सरणी और गैर-मानचित्र फ़ील्ड के लिए, क्लाउड फायरस्टोर दो संग्रह-दायरे वाले एकल-फ़ील्ड इंडेक्स को परिभाषित करता है, एक आरोही मोड में और एक अवरोही मोड में।

  • प्रत्येक मानचित्र फ़ील्ड के लिए, Cloud Firestore निम्नलिखित बनाता है:

    • प्रत्येक गैर-सरणी, गैर-नक्शा उपक्षेत्र के लिए एक संग्रह-दायरा आरोही सूचकांक।
    • प्रत्येक गैर-सरणी, गैर-नक्शा उपक्षेत्र के लिए एक संग्रह-दायरा अवरोही सूचकांक।
    • प्रत्येक सरणी उपक्षेत्र के लिए एक संग्रह-दायरा सरणी-युक्त अनुक्रमणिका।
    • Cloud Firestore प्रत्येक मैप सबफ़ील्ड को बार-बार अनुक्रमित करता है।
  • दस्तावेज़ में प्रत्येक सरणी फ़ील्ड के लिए, क्लाउड फायरस्टार एक संग्रह-दायरा सरणी-युक्त अनुक्रमणिका बनाता और बनाए रखता है।

  • संग्रह समूह स्कोप के साथ एकल-फ़ील्ड अनुक्रमणिका डिफ़ॉल्ट रूप से बनाए नहीं रखी जाती हैं।

सिंगल-फील्ड इंडेक्स छूट

आप एकल-फ़ील्ड अनुक्रमणिका छूट बनाकर किसी फ़ील्ड को अपनी स्वचालित अनुक्रमण सेटिंग से छूट दे सकते हैं। एक अनुक्रमण छूट डेटाबेस-व्यापी स्वचालित अनुक्रमणिका सेटिंग्स को ओवरराइड करती है। एक छूट एकल-फ़ील्ड अनुक्रमणिका को सक्षम कर सकती है जिसे आपकी स्वचालित अनुक्रमणिका सेटिंग्स अन्यथा किसी एकल-फ़ील्ड अनुक्रमणिका को अक्षम या अक्षम कर देंगी जो कि स्वचालित अनुक्रमणिका अन्यथा सक्षम करेगी. उन मामलों के लिए जहां छूट उपयोगी हो सकती है, इंडेक्सिंग सर्वोत्तम अभ्यास देखें।

यदि आप मानचित्र फ़ील्ड के लिए एकल-फ़ील्ड अनुक्रमणिका छूट बनाते हैं, तो मानचित्र के उपफ़ील्ड उन सेटिंग्स को इनहेरिट करते हैं। हालाँकि, आप विशिष्ट उपक्षेत्रों के लिए एकल-क्षेत्र अनुक्रमणिका छूट को परिभाषित कर सकते हैं। यदि आप किसी सबफ़ील्ड के लिए कोई छूट हटाते हैं, तो सबफ़ील्ड अपने पैरेंट की छूट सेटिंग्स, यदि वे मौजूद हैं, या डेटाबेस-व्यापी सेटिंग्स, यदि कोई पैरेंट छूट मौजूद नहीं है, इनहेरिट करेगा।

सिंगल-फ़ील्ड इंडेक्स छूट बनाने और प्रबंधित करने के लिए, Cloud Firestore में इंडेक्स प्रबंधित करना देखें।

समग्र सूचकांक

एक समग्र सूचकांक एक संग्रह में सभी दस्तावेजों की क्रमबद्ध मैपिंग को संग्रहीत करता है, जो अनुक्रमित करने के लिए फ़ील्ड की एक आदेशित सूची के आधार पर होता है।

क्लाउड फायरस्टोर उन प्रश्नों का समर्थन करने के लिए कंपोजिट इंडेक्स का उपयोग करता है जो पहले से सिंगल-फील्ड इंडेक्स द्वारा समर्थित नहीं हैं।

Cloud Firestore बड़ी संख्या में संभावित फ़ील्ड संयोजनों के कारण स्वचालित रूप से समग्र इंडेक्स नहीं बनाता है, जैसा कि यह सिंगल-फ़ील्ड इंडेक्स के लिए करता है। इसके बजाय, जब आप अपना ऐप बनाते हैं, तो Cloud Firestore आपको आवश्यक कंपोजिट इंडेक्स की पहचान करने और बनाने में मदद करता है।

यदि आप पहले आवश्यक इंडेक्स बनाए बिना उपरोक्त क्वेरी का प्रयास करते हैं, तो क्लाउड फायरस्टोर एक त्रुटि संदेश लौटाता है जिसमें एक लिंक होता है जिसका अनुसरण आप लापता इंडेक्स बनाने के लिए कर सकते हैं। यह किसी भी समय होता है जब आप किसी अनुक्रमणिका द्वारा समर्थित क्वेरी का प्रयास नहीं करते हैं। आप कंसोल या फायरबेस सीएलआई का उपयोग करके मैन्युअल रूप से कंपोजिट इंडेक्स को परिभाषित और प्रबंधित कर सकते हैं। कंपोजिट इंडेक्स बनाने और प्रबंधित करने के बारे में अधिक जानकारी के लिए, इंडेक्स प्रबंधित करना देखें।

इंडेक्स मोड और क्वेरी स्कोप

आप एकल-फ़ील्ड और कंपोजिट इंडेक्स को अलग-अलग तरीके से कॉन्फ़िगर करते हैं, लेकिन दोनों के लिए आवश्यक है कि आप अपने इंडेक्स के लिए इंडेक्स मोड और क्वेरी स्कोप कॉन्फ़िगर करें।

सूचकांक मोड

जब आप किसी अनुक्रमणिका को परिभाषित करते हैं, तो आप प्रत्येक अनुक्रमित फ़ील्ड के लिए एक अनुक्रमणिका मोड का चयन करते हैं। प्रत्येक फ़ील्ड का इंडेक्स मोड उस फ़ील्ड पर विशिष्ट क्वेरी क्लॉज़ का समर्थन करता है। आप निम्न अनुक्रमणिका मोड में से चयन कर सकते हैं:

सूचकांक मोड विवरण
आरोही फ़ील्ड पर < , <= , == , >= , > , != , in , और not-in , क्वेरी क्लॉज़ का समर्थन करता है और इस फ़ील्ड मान के आधार पर परिणामों को आरोही क्रम में सॉर्ट करने का समर्थन करता है।
अवरोही फ़ील्ड पर < , <= , == , >= , > , != , in , और not-in query क्लॉज़ का समर्थन करता है और इस फ़ील्ड मान के आधार पर परिणामों को अवरोही क्रम में सॉर्ट करने का समर्थन करता है।
सरणी-शामिल है क्षेत्र पर array-contains और array-contains-any क्वेरी खंड का समर्थन करता है।

क्वेरी स्कोप

प्रत्येक अनुक्रमणिका या तो संग्रह या संग्रह समूह तक सीमित है। इसे इंडेक्स के क्वेरी स्कोप के रूप में जाना जाता है:

संग्रह का दायरा
Cloud Firestore डिफ़ॉल्ट रूप से संग्रह के दायरे के साथ इंडेक्स बनाता है। ये अनुक्रमणिका उन प्रश्नों का समर्थन करती हैं जो एकल संग्रह से परिणाम लौटाते हैं।

संग्रह समूह का दायरा
एक संग्रह समूह में एक ही संग्रह आईडी वाले सभी संग्रह शामिल होते हैं। एक संग्रह समूह क्वेरी चलाने के लिए जो एक संग्रह समूह से फ़िल्टर किए गए या आदेशित परिणाम देता है, आपको संग्रह समूह के दायरे के साथ एक संबंधित अनुक्रमणिका बनानी होगी।

डिफ़ॉल्ट क्रम और __name__ फ़ील्ड

प्रत्येक फ़ील्ड (आरोही या अवरोही) के लिए निर्दिष्ट इंडेक्स मोड द्वारा दस्तावेज़ों को सॉर्ट करने के अलावा, इंडेक्स प्रत्येक दस्तावेज़ के __name__ फ़ील्ड द्वारा अंतिम सॉर्टिंग लागू करते हैं। __name__ फ़ील्ड का मान पूर्ण दस्तावेज़ पथ पर सेट है। इसका अर्थ है कि समान फ़ील्ड मानों वाले परिणाम सेट में दस्तावेज़ दस्तावेज़ पथ द्वारा सॉर्ट किए जाते हैं।

डिफ़ॉल्ट रूप से, __name__ फ़ील्ड को इंडेक्स परिभाषा में अंतिम सॉर्ट किए गए फ़ील्ड की उसी दिशा में सॉर्ट किया जाता है। उदाहरण के लिए:

संग्रह फ़ील्ड अनुक्रमित क्वेरी का दायरा
शहरों नाम, __name__ संग्रह
शहरों स्टेट, __name__ संग्रह
शहरों कंट्री, पॉप्युलेशन, __name__ संग्रह

गैर-डिफ़ॉल्ट __name__ दिशा द्वारा परिणामों को क्रमबद्ध करने के लिए, आपको वह अनुक्रमणिका बनाने की आवश्यकता है।

अनुक्रमण उदाहरण

स्वचालित रूप से आपके लिए सिंगल-फ़ील्ड इंडेक्स बनाकर, क्लाउड फायरस्टोर आपके एप्लिकेशन को सबसे बुनियादी डेटाबेस प्रश्नों का शीघ्रता से समर्थन करने की अनुमति देता है। सिंगल-फ़ील्ड इंडेक्स आपको फ़ील्ड वैल्यू और तुलनित्र < , <= , == , >= , > , और 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"])

समग्र अनुक्रमणिका द्वारा समर्थित क्वेरीज़

Cloud Firestore कंपाउंड क्वेरीज़ को सपोर्ट करने के लिए कंपोज़िट इंडेक्स का उपयोग करता है जो सिंगल-फ़ील्ड इंडेक्स द्वारा पहले से समर्थित नहीं है। उदाहरण के लिए, आपको निम्नलिखित प्रश्नों के लिए एक समग्र अनुक्रमणिका की आवश्यकता होगी:

वेब
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()

अनुक्रमणिका प्रविष्टियाँ

आपके प्रोजेक्ट की कॉन्फ़िगर की गई अनुक्रमणिका और किसी दस्तावेज़ की संरचना किसी दस्तावेज़ के लिए अनुक्रमणिका प्रविष्टियों की संख्या निर्धारित करती है। अनुक्रमणिका प्रविष्टियाँ अनुक्रमणिका प्रविष्टि गणना सीमा की ओर गिनी जाती हैं।

निम्न उदाहरण किसी दस्तावेज़ की अनुक्रमणिका प्रविष्टियों को प्रदर्शित करता है।

दस्तावेज़

/cities/SF

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

सिंगल-फील्ड इंडेक्स

  • शहर_नाम ए.एस.सी
  • शहर_नाम डीईएससी
  • तापमान। गर्मी ए.एस.सी
  • तापमान। ग्रीष्म डीईएससी
  • तापमान। शीतकालीन ए.एस.सी
  • तापमान। शीतकालीन डीईएससी
  • आस-पड़ोस सरणी में शामिल है (एएससी और डीईएससी)

समग्र सूचकांक

  • City_name ASC, आस-पड़ोस ARRAY
  • City_name DESC, आस-पड़ोस ARRAY

अनुक्रमणिका प्रविष्टियाँ

इस इंडेक्सिंग कॉन्फ़िगरेशन के परिणामस्वरूप दस्तावेज़ के लिए निम्नलिखित 18 अनुक्रमणिका प्रविष्टियाँ होती हैं:

अनुक्रमणिका अनुक्रमित डेटा
एकल-क्षेत्र अनुक्रमणिका प्रविष्टियाँ
शहर_नाम ए.एस.सी City_name: "सैन फ़्रांसिस्को"
शहर_नाम डीईएससी City_name: "सैन फ़्रांसिस्को"
तापमान। गर्मी ए.एस.सी तापमान। गर्मी: 67
तापमान। ग्रीष्म डीईएससी तापमान। गर्मी: 67
तापमान। शीतकालीन ए.एस.सी तापमान। सर्दी: 55
तापमान। शीतकालीन डीईएससी तापमान। सर्दी: 55
पड़ोस ऐरे में एएससी शामिल है पड़ोस: "मिशन"
पड़ोस सरणी में डीईएससी शामिल है पड़ोस: "मिशन"
पड़ोस ऐरे में एएससी शामिल है पड़ोस: "डाउनटाउन"
पड़ोस सरणी में डीईएससी शामिल है पड़ोस: "डाउनटाउन"
पड़ोस ऐरे में एएससी शामिल है पड़ोस: "मरीना"
पड़ोस सरणी में डीईएससी शामिल है पड़ोस: "मरीना"
समग्र सूचकांक प्रविष्टियाँ
City_name ASC, आस-पड़ोस ARRAY City_name: "सैन फ़्रांसिस्को", आस-पड़ोस: "मिशन"
City_name ASC, आस-पड़ोस ARRAY City_name: "सैन फ़्रांसिस्को", आस-पड़ोस: "डाउनटाउन"
City_name ASC, आस-पड़ोस ARRAY City_name: "सैन फ़्रांसिस्को", आस-पड़ोस: "मरीना"
City_name DESC, आस-पड़ोस ARRAY City_name: "सैन फ़्रांसिस्को", आस-पड़ोस: "मिशन"
City_name DESC, आस-पड़ोस ARRAY City_name: "सैन फ़्रांसिस्को", आस-पड़ोस: "डाउनटाउन"
City_name DESC, आस-पड़ोस ARRAY City_name: "सैन फ़्रांसिस्को", आस-पड़ोस: "मरीना"

सूचकांक और मूल्य निर्धारण

इंडेक्स आपके एप्लिकेशन की स्टोरेज लागत में योगदान देता है। अनुक्रमणिका के लिए संग्रहण आकार की गणना कैसे की जाती है, इस बारे में अधिक जानकारी के लिए, अनुक्रमणिका प्रविष्टि आकार देखें।

सूचकांक विलय का लाभ उठाते हुए

हालांकि क्लाउड फायरस्टोर प्रत्येक क्वेरी के लिए एक इंडेक्स का उपयोग करता है, लेकिन यह आवश्यक नहीं है कि प्रति क्वेरी एक इंडेक्स की आवश्यकता हो। एकाधिक समानता वाले प्रश्नों के लिए ( == ) खंड और, वैकल्पिक रूप से, एक orderBy क्लॉज, क्लाउड फायरस्टार मौजूदा इंडेक्स का फिर से उपयोग कर सकता है। Cloud Firestore बड़े समानता प्रश्नों के लिए आवश्यक समग्र अनुक्रमणिका बनाने के लिए सरल समानता फ़िल्टर के लिए अनुक्रमणिका को मर्ज कर सकता है।

आप उन स्थितियों की पहचान करके अनुक्रमण लागत को कम कर सकते हैं जहाँ आप अनुक्रमणिका विलय का लाभ उठा सकते हैं। उदाहरण के लिए, एक रेस्तरां रेटिंग ऐप के लिए एक 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")

आप प्रत्येक क्वेरी के लिए एक अनुक्रमणिका बना सकते हैं:

संग्रह फ़ील्ड अनुक्रमित क्वेरी का दायरा
रेस्टोरेंट श्रेणी, स्टार_रेटिंग संग्रह
रेस्टोरेंट सिटी, स्टार_रेटिंग संग्रह
रेस्टोरेंट श्रेणी, सिटी, स्टार_रेटिंग संग्रह
रेस्टोरेंट कैटेगरी, सिटी, एडिटर्स_पिक, स्टार_रेटिंग संग्रह

एक बेहतर समाधान के रूप में, आप क्लाउड फायरस्टोर की समानता खंड के लिए इंडेक्स को मर्ज करने की क्षमता का लाभ उठाकर इंडेक्स की संख्या को कम कर सकते हैं:

संग्रह फ़ील्ड अनुक्रमित क्वेरी का दायरा
रेस्टोरेंट श्रेणी, स्टार_रेटिंग संग्रह
रेस्टोरेंट सिटी, स्टार_रेटिंग संग्रह
रेस्टोरेंट एडिटर्स_पिक, स्टार_रेटिंग संग्रह

इंडेक्स का यह सेट न केवल छोटा है, यह एक अतिरिक्त क्वेरी का भी समर्थन करता है:

वेब
db.collection("restaurants").where("editors_pick", "==", true)
                            .orderBy("star_rating")

अनुक्रमण सीमाएँ

निम्नलिखित सीमाएं इंडेक्स पर लागू होती हैं। सभी कोटा और सीमाओं के लिए, कोटा और सीमाएं देखें।

आप LIMIT विवरण
एक डेटाबेस के लिए समग्र अनुक्रमणिकाओं की अधिकतम संख्या

200

इस सीमा को बढ़ाने का अनुरोध करने के लिए आप समर्थन से संपर्क कर सकते हैं।

किसी डेटाबेस के लिए एकल-फ़ील्ड कॉन्फ़िगरेशन की अधिकतम संख्या

200

कुल 200 फ़ील्ड स्तरीय कॉन्फ़िगरेशन की अनुमति है। एक फ़ील्ड कॉन्फ़िगरेशन में एक ही फ़ील्ड के लिए कई कॉन्फ़िगरेशन हो सकते हैं। उदाहरण के लिए, एक ही फ़ील्ड पर एकल-फ़ील्ड इंडेक्सिंग छूट और एक TTL नीति को सीमा के लिए एक फ़ील्ड कॉन्फ़िगरेशन के रूप में गिना जाता है।

प्रत्येक दस्तावेज़ के लिए अनुक्रमणिका प्रविष्टियों की अधिकतम संख्या

40,000

किसी दस्तावेज़ के लिए अनुक्रमणिका प्रविष्टियों की संख्या निम्न का योग है:

  • एकल-फ़ील्ड अनुक्रमणिका प्रविष्टियों की संख्या
  • मिश्रित अनुक्रमणिका प्रविष्टियों की संख्या

यह देखने के लिए कि क्लाउड फायरस्टोर कैसे एक दस्तावेज़ और इंडेक्स के एक सेट को इंडेक्स प्रविष्टियों में बदल देता है, यह इंडेक्स एंट्री काउंट उदाहरण देखें।

संयुक्त अनुक्रमणिका में फ़ील्ड्स की अधिकतम संख्या 100
इंडेक्स एंट्री का अधिकतम आकार

7.5 कीबी

यह देखने के लिए कि Cloud Firestore इंडेक्स एंट्री साइज़ की गणना कैसे करता है, इंडेक्स एंट्री साइज़ देखें।

किसी दस्तावेज़ की अनुक्रमणिका प्रविष्टियों के आकार का अधिकतम योग

8 एमआईबी

किसी दस्तावेज़ के लिए कुल आकार निम्न का योग होता है:

  • किसी दस्तावेज़ की एकल-फ़ील्ड अनुक्रमणिका प्रविष्टियों के आकार का योग
  • किसी दस्तावेज़ की मिश्रित अनुक्रमणिका प्रविष्टियों के आकार का योग
  • अनुक्रमित फ़ील्ड मान का अधिकतम आकार

    1500 बाइट्स

    1500 बाइट से अधिक फ़ील्ड मानों को छोटा कर दिया गया है। काटे गए फ़ील्ड मानों से संबंधित क्वेरी असंगत परिणाम दे सकती हैं।

    अनुक्रमण सर्वोत्तम प्रथाओं

    अधिकांश ऐप्स के लिए, आप अपने अनुक्रमणिका को प्रबंधित करने के लिए स्वचालित अनुक्रमणिका और त्रुटि संदेश लिंक पर भरोसा कर सकते हैं। हालाँकि, आप निम्नलिखित मामलों में एकल-फ़ील्ड छूट जोड़ना चाह सकते हैं:

    मामला विवरण
    बड़े स्ट्रिंग फ़ील्ड

    यदि आपके पास एक स्ट्रिंग फ़ील्ड है जिसमें अक्सर लंबे स्ट्रिंग मान होते हैं जिनका उपयोग आप क्वेरी करने के लिए नहीं करते हैं, तो आप फ़ील्ड को इंडेक्सिंग से छूट देकर संग्रहण लागत में कटौती कर सकते हैं।

    अनुक्रमिक मूल्यों वाले दस्तावेजों वाले संग्रह के लिए उच्च लेखन दर

    यदि आप किसी ऐसे फ़ील्ड को अनुक्रमित करते हैं जो किसी संग्रह में दस्तावेज़ों के बीच अनुक्रमिक रूप से बढ़ता या घटता है, जैसे टाइमस्टैम्प, तो संग्रह में लिखने की अधिकतम दर प्रति सेकंड 500 लिखती है। यदि आप अनुक्रमिक मानों के साथ फ़ील्ड के आधार पर क्वेरी नहीं करते हैं, तो आप इस सीमा को बायपास करने के लिए फ़ील्ड को इंडेक्सिंग से मुक्त कर सकते हैं।

    उच्च लेखन दर वाले IoT उपयोग मामले में, उदाहरण के लिए, टाइमस्टैम्प फ़ील्ड वाले दस्तावेज़ों का संग्रह प्रति सेकंड 500 लिखने की सीमा तक पहुंच सकता है।

    टीटीएल क्षेत्र

    यदि आप TTL (टाइम-टू-लाइव) नीतियों का उपयोग करते हैं, तो ध्यान दें कि TTL फ़ील्ड एक टाइमस्टैम्प होना चाहिए। टीटीएल क्षेत्रों पर अनुक्रमण डिफ़ॉल्ट रूप से सक्षम है और उच्च यातायात दरों पर प्रदर्शन को प्रभावित कर सकता है। सर्वोत्तम अभ्यास के रूप में, अपने TTL फ़ील्ड के लिए एकल-फ़ील्ड छूट जोड़ें।

    बड़ी सरणी या मानचित्र फ़ील्ड

    बड़ी सरणी या मानचित्र फ़ील्ड प्रति दस्तावेज़ 40,000 अनुक्रमणिका प्रविष्टियों की सीमा तक पहुँच सकते हैं। यदि आप किसी बड़ी सरणी या मानचित्र फ़ील्ड के आधार पर क्वेरी नहीं कर रहे हैं, तो आपको इसे अनुक्रमण से छूट देनी चाहिए।

    इंडेक्सिंग समस्याओं (इंडेक्स फैनआउट, INVALID_ARGUMENT त्रुटियां) को हल करने के तरीके के बारे में अधिक जानकारी के लिए समस्या निवारण पृष्ठ देखें।