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

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

यह पृष्ठ Cloud Firestore द्वारा उपयोग किए जाने वाले दो प्रकार के अनुक्रमणिका, एकल-फ़ील्ड अनुक्रमणिका और मिश्रित अनुक्रमणिका का वर्णन करता है।

प्रत्येक क्वेरी के पीछे एक अनुक्रमणिका

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

सूचकांक मोड

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

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

क्वेरी स्कोप

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

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

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

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

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

डिफ़ॉल्ट स्वचालित अनुक्रमण सेटिंग्स को मानते हुए, Cloud Firestore एक आरोही एकल-फ़ील्ड अनुक्रमणिका प्रति गैर-सरणी फ़ील्ड, एक अवरोही एकल-फ़ील्ड अनुक्रमणिका प्रति गैर-सरणी फ़ील्ड, और एक सरणी-सम्मिलित एकल-फ़ील्ड अनुक्रमणिका को सरणी फ़ील्ड के लिए अद्यतन करता है। निम्न तालिका में प्रत्येक पंक्ति एकल-फ़ील्ड अनुक्रमणिका में एक प्रविष्टि का प्रतिनिधित्व करती है:

संग्रह फ़ील्ड अनुक्रमित क्वेरी का दायरा
शहरों नाम संग्रह
शहरों स्टेट संग्रह
शहरों देश संग्रह
शहरों कैपिटल संग्रह
शहरों की ओर जनसंख्या संग्रह
शहरों नाम संग्रह
शहरों स्टेट संग्रह
शहरों देश संग्रह
शहरों कैपिटल संग्रह
शहरों की ओर आबादी संग्रह
शहरों 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()

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

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

उदाहरण के लिए यहां एक उदाहरण दिया गया है।

दस्तावेज़

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

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

  • (स्वचालित) नाम एएससी और डीईएससी
  • (स्वचालित) तापमान एएससी और डीईएससी
  • (स्वचालित) पड़ोस ऐरे में शामिल हैं

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

  • नाम एएससी, पड़ोस एएससी
  • नाम डीईएससी, पड़ोस एएससी

परिणामी सूचकांक प्रविष्टियाँ

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

अनुक्रमणिका प्रवेश
नाम एएससी और डीईएससी नाम: "सैन फ्रांसिस्को"
तापमान एएससी और डीईएससी तापमान।गर्मी: 67
तापमान एएससी और डीईएससी तापमान। सर्दी: 55
पड़ोस ऐरे में शामिल हैं पड़ोस: "मिशन"
पड़ोस ऐरे में शामिल हैं पड़ोस: "डाउनटाउन"
पड़ोस ऐरे में शामिल हैं पड़ोस: "मरीना"
नाम एएससी, पड़ोस एएससी नाम: "सैन फ्रांसिस्को", पड़ोस: "मिशन"
नाम एएससी, पड़ोस एएससी नाम: "सैन फ्रांसिस्को", पड़ोस: "डाउनटाउन"
नाम एएससी, पड़ोस एएससी नाम: "सैन फ्रांसिस्को", पड़ोस: "मरीना"
नाम डीईएससी, पड़ोस एएससी नाम: "सैन फ्रांसिस्को", पड़ोस: "मिशन"
नाम डीईएससी, पड़ोस एएससी नाम: "सैन फ्रांसिस्को", पड़ोस: "डाउनटाउन"
नाम डीईएससी, पड़ोस एएससी नाम: "सैन फ्रांसिस्को", पड़ोस: "मरीना"

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

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

इंडेक्स मर्जिंग का फायदा उठा रहे हैं

हालांकि क्लाउड फायरस्टोर प्रत्येक क्वेरी के लिए एक इंडेक्स का उपयोग करता है, लेकिन जरूरी नहीं कि प्रति क्वेरी एक इंडेक्स की आवश्यकता हो। एकाधिक समानता वाले प्रश्नों के लिए ( == ) क्लॉज और, वैकल्पिक रूप से, 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")

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

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

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

200

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

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

40,000

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

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

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

अनुक्रमणिका प्रविष्टि का अधिकतम आकार

7.5 कीबी

यह देखने के लिए कि Cloud Firestore अनुक्रमणिका प्रविष्टि आकार की गणना कैसे करता है, अनुक्रमणिका प्रविष्टि आकार देखें।

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

8 एमआईबी

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

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

    1500 बाइट्स

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

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

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

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

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

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

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

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

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

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