क्लाउड फायरस्टोर में इंडेक्स प्रबंधित करें

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

त्रुटि संदेश के माध्यम से एक अनुपलब्ध अनुक्रमणिका बनाएँ

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

फायरबेस कंसोल पर जेनरेट किए गए लिंक का पालन करें, स्वचालित रूप से पॉप्युलेट की गई जानकारी की समीक्षा करें और क्रिएट पर क्लिक करें।

भूमिकाएँ और अनुमतियाँ

इससे पहले कि आप क्लाउड फायरस्टोर में एक इंडेक्स बना सकें, सुनिश्चित करें कि आपको निम्नलिखित में से कोई एक भूमिका सौंपी गई है:

  • roles/datastore.owner
  • roles/datastore.indexAdmin
  • roles/editor
  • roles/owner

यदि आपने कस्टम भूमिकाएँ परिभाषित की हैं, तो अनुक्रमणिका बनाने के लिए निम्नलिखित सभी अनुमतियाँ निर्दिष्ट करें:

  • datastore.indexes.create
  • datastore.indexes.delete
  • datastore.indexes.get
  • datastore.indexes.list
  • datastore.indexes.update

फायरबेस कंसोल का उपयोग करें

फ़ायरबेस कंसोल से मैन्युअल रूप से एक नया इंडेक्स बनाने के लिए:

फायरबेस कंसोल में फायरस्टोर इंडेक्सिंग इंटरफ़ेस की छवि

  1. फायरबेस कंसोल के क्लाउड फायरस्टोर अनुभाग पर जाएं।
  2. इंडेक्स टैब पर जाएं और इंडेक्स जोड़ें पर क्लिक करें।
  3. संग्रह नाम दर्ज करें और वे फ़ील्ड सेट करें जिनके द्वारा आप अनुक्रमणिका को ऑर्डर करना चाहते हैं।
  4. बनाएं पर क्लिक करें.

सूचकांक फ़ील्ड को फ़ील्ड पथों पर मौजूद बाधाओं के अनुरूप होना चाहिए

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

अनुक्रमणिका हटाएँ

किसी अनुक्रमणिका को हटाने के लिए:

  1. फायरबेस कंसोल के क्लाउड फायरस्टोर अनुभाग पर जाएं।
  2. इंडेक्स टैब पर क्लिक करें.
  3. जिस इंडेक्स को आप हटाना चाहते हैं उस पर होवर करें और संदर्भ मेनू से डिलीट का चयन करें।
  4. अलर्ट से हटाएँ पर क्लिक करके पुष्टि करें कि आप इसे हटाना चाहते हैं।

फायरबेस सीएलआई का प्रयोग करें

आप फायरबेस सीएलआई के साथ इंडेक्स भी तैनात कर सकते हैं। आरंभ करने के लिए, अपनी प्रोजेक्ट निर्देशिका में firebase init firestore चलाएँ। सेटअप के दौरान, फायरबेस सीएलआई सही प्रारूप में डिफ़ॉल्ट इंडेक्स के साथ एक JSON फ़ाइल उत्पन्न करता है। अधिक इंडेक्स जोड़ने के लिए फ़ाइल को संपादित करें और इसे firebase deploy कमांड के साथ तैनात करें।

केवल क्लाउड फायरस्टोर इंडेक्स और नियमों को तैनात करने के लिए, --only firestore ध्वज जोड़ें।

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

टेराफॉर्म का प्रयोग करें

डेटाबेस में इंडेक्स बनाना

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

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

निम्नलिखित उदाहरण टेराफ़ॉर्म कॉन्फ़िगरेशन फ़ाइल chatrooms संग्रह में name फ़ील्ड पर एकल-फ़ील्ड इंडेक्स बनाती है:

firestore.tf

resource "random_id" "variable"{
  byte_length = 8
}

resource "google_firestore_field" "single-index" {
  project = "project-id"
  database = "database-id"
  collection = "chatrooms_${random_id.variable.hex}"
  field = "name"

  index_config {
    indexes {
        order = "ASCENDING"
        query_scope = "COLLECTION_GROUP"
    }
    indexes {
        array_config = "CONTAINS"
    }
  }

  ttl_config {}
}
  • project-id अपनी प्रोजेक्ट आईडी से बदलें। प्रोजेक्ट आईडी अद्वितीय होनी चाहिए.
  • database-id अपनी डेटाबेस आईडी से बदलें।

संयुक्त सूचकांक

निम्नलिखित उदाहरण टेराफॉर्म कॉन्फ़िगरेशन फ़ाइल chatrooms संग्रह में name फ़ील्ड और description फ़ील्ड के संयोजन के लिए एक समग्र सूचकांक बनाती है:

firestore.tf

resource "google_firestore_index" "composite-index" {
  project = "project-id"
  database = "database-id"

  collection = "chatrooms"

  fields {
    field_path = "name"
    order      = "ASCENDING"
  }

  fields {
    field_path = "description"
    order      = "DESCENDING"
  }

}
  • project-id अपनी प्रोजेक्ट आईडी से बदलें। प्रोजेक्ट आईडी अद्वितीय होनी चाहिए.
  • database-id अपनी डेटाबेस आईडी से बदलें।

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

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

  • इंडेक्स सेट करने में कुछ मिनट लगते हैं। किसी इंडेक्स के लिए न्यूनतम निर्माण समय कुछ मिनट है, यहां तक ​​कि खाली डेटाबेस के लिए भी।

  • बैकफ़िल का समय इस बात पर निर्भर करता है कि नए इंडेक्स में कितना मौजूदा डेटा है। जितने अधिक फ़ील्ड मान सूचकांक परिभाषा से मेल खाते हैं, सूचकांक को बैकफ़िल करने में उतना ही अधिक समय लगता है।

इंडेक्स बिल्ड लंबे समय तक चलने वाले ऑपरेशन हैं।

आपके द्वारा इंडेक्स बिल्ड शुरू करने के बाद, क्लाउड फायरस्टोर ऑपरेशन को एक अद्वितीय नाम निर्दिष्ट करता है। ऑपरेशन नाम के पहले projects/[PROJECT_ID]/databases/(default)/operations/ जुड़े होते हैं, उदाहरण के लिए:

projects/project-id/databases/(default)/operations/ASA1MTAwNDQxNAgadGx1YWZlZAcSeWx0aGdpbi1zYm9qLW5pbWRhEgopEg

हालाँकि, आप describe कमांड के लिए ऑपरेशन नाम निर्दिष्ट करते समय उपसर्ग को छोड़ सकते हैं।

लंबे समय से चल रहे सभी कार्यों की सूची बनाना

लंबे समय तक चलने वाले ऑपरेशनों को सूचीबद्ध करने के लिए, gcloud फायरस्टोर ऑपरेशन्स लिस्ट कमांड का उपयोग करें। यह कमांड चल रहे और हाल ही में पूरे हुए ऑपरेशनों को सूचीबद्ध करता है। संचालन पूरा होने के बाद कुछ दिनों के लिए सूचीबद्ध हैं:

gcloud firestore operations list

संचालन की स्थिति जांचें

सभी लंबे समय से चल रहे ऑपरेशनों को सूचीबद्ध करने के बजाय, आप किसी एकल ऑपरेशन का विवरण सूचीबद्ध कर सकते हैं:

gcloud firestore operations describe operation-name

पूरा होने के समय का अनुमान लगाना

जैसे ही आपका ऑपरेशन चलता है, ऑपरेशन की समग्र स्थिति के लिए state फ़ील्ड का मान देखें।

लंबे समय तक चलने वाले ऑपरेशन की स्थिति के लिए अनुरोध भी मेट्रिक्स workEstimated और workCompleted लौटाता है। ये मेट्रिक्स दस्तावेज़ों की संख्या के लिए लौटाए जाते हैं। workEstimated एक ऑपरेशन द्वारा संसाधित किए जाने वाले दस्तावेज़ों की अनुमानित कुल संख्या दिखाता है। workCompleted अब तक संसाधित दस्तावेज़ों की संख्या दिखाता है। ऑपरेशन पूरा होने के बाद, workCompleted वास्तव में संसाधित किए गए दस्तावेज़ों की कुल संख्या को दर्शाता है, जो workEstimated के मूल्य से भिन्न हो सकता है।

मोटे तौर पर प्रगति के अनुमान के लिए workCompleted workEstimated से विभाजित करें। अनुमान गलत हो सकता है क्योंकि यह विलंबित सांख्यिकी संग्रह पर निर्भर करता है।

उदाहरण के लिए, यहां इंडेक्स बिल्ड की प्रगति स्थिति है:

{
  "operations": [
    {
      "name": "projects/project-id/operations/AyAyMDBiM2U5NTgwZDAtZGIyYi0zYjc0LTIzYWEtZjg1ZGdWFmZWQHEjF0c2Flc3UtcmV4ZWRuaS1uaW1kYRUKSBI",
      "metadata": {
        "@type": "type.googleapis.com/google.firestore.admin.v1.IndexOperationMetadata",
        "common": {
          "operationType": "CREATE_INDEX",
          "startTime": "2020-06-23T16:52:25.697539Z",
          "state": "PROCESSING"
        },
        "progressDocuments": {
          "workCompleted": "219327",
          "workEstimated": "2198182"
        }
       },
    },
    ...

जब कोई ऑपरेशन किया जाता है, तो ऑपरेशन विवरण में "done": true शामिल होगा। ऑपरेशन के परिणाम के लिए state फ़ील्ड का मान देखें। यदि done फ़ील्ड प्रतिक्रिया में सेट नहीं है, तो इसका मान false है। प्रगतिरत कार्यों के लिए done मूल्य के अस्तित्व पर निर्भर न रहें।

सूचकांक निर्माण त्रुटियाँ

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

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