क्लाउड फायरस्टोर में सूचकांक प्रकार

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

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

प्रत्येक क्वेरी के पीछे एक सूचकांक

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

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

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

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

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

एकल-क्षेत्र अनुक्रमणिका

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

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

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

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

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

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

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

एकल-क्षेत्र सूचकांक छूट

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

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

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

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

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

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

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

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

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

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

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

सूचकांक मोड

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

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

क्वेरी का दायरा

प्रत्येक सूचकांक का दायरा या तो एक संग्रह या एक संग्रह समूह तक होता है। इसे सूचकांक के क्वेरी दायरे के रूप में जाना जाता है:

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

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

डिफ़ॉल्ट ऑर्डरिंग और __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"])

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

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

वेब
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"]

एकल-फ़ील्ड अनुक्रमणिका

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

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

  • शहर_नाम ASC, पड़ोस ARRAY
  • शहर_नाम DESC, पड़ोस ARRAY

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

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

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

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

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

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

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

आप उन स्थितियों की पहचान करके अनुक्रमण लागत को कम कर सकते हैं जहां आप सूचकांक विलय का लाभ उठा सकते हैं। उदाहरण के लिए, किसी रेस्तरां रेटिंग ऐप के लिए restaurants संग्रह की कल्पना करें:

  • रेस्तरां

    • बर्गरथाइम

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

अब, कल्पना करें कि यह ऐप नीचे दी गई क्वेरीज़ का उपयोग करता है। ध्यान दें कि ऐप हमेशा बढ़ते हुए star_rating के आधार पर सॉर्ट करते समय category , city और editors_pick के लिए समानता खंडों के संयोजन का उपयोग करता है:

वेब
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 विवरण
किसी डेटाबेस के लिए समग्र अनुक्रमितों की अधिकतम संख्या
किसी डेटाबेस के लिए एकल-फ़ील्ड कॉन्फ़िगरेशन की अधिकतम संख्या

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

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

40,000

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

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

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

किसी समग्र सूचकांक में फ़ील्ड की अधिकतम संख्या 100
सूचकांक प्रविष्टि का अधिकतम आकार

7.5 KiB

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

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

8 एमआईबी

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

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

    1500 बाइट्स

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

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

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

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

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

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

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

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

    टीटीएल फ़ील्ड

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

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

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

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