Cloud Firestore में इंडेक्स मैनेज करें

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

गड़बड़ी के मैसेज की मदद से ऐसा इंडेक्स बनाना जो मौजूद नहीं है

अगर आप ऐसे रेंज क्लॉज़ वाली कंपाउंड क्वेरी जो किसी मौजूदा इंडेक्स से मैप नहीं करती है, आपको गड़बड़ी का कोई मैसेज मिलता है. गड़बड़ी के मैसेज में एक डायरेक्ट लिंक होता है. इस लिंक की मदद से, Firebase कंसोल में इंडेक्स नहीं है.

Firebase कंसोल के लिए जनरेट किए गए लिंक को फ़ॉलो करें और जानकारी भरें और बनाएं पर क्लिक करें.

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

Cloud Firestore में इंडेक्स बनाने से पहले, पक्का कर लें कि आपको इनमें से कोई एक भूमिका असाइन की गई हो:

  • 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

Firebase कंसोल का इस्तेमाल करना

Firebase कंसोल से, मैन्युअल तरीके से नया इंडेक्स बनाने के लिए:

इसकी इमेज
Firebase कंसोल में फ़ायरस्टोर इंडेक्स करने का इंटरफ़ेस

  1. Firebase कंसोल के Cloud Firestore सेक्शन पर जाएं.
  2. इंडेक्स टैब पर जाएं और इंडेक्स जोड़ें पर क्लिक करें.
  3. कलेक्शन का नाम डालें और वे फ़ील्ड सेट करें जिनके हिसाब से आपको इंडेक्स को क्रम से लगाना है.
  4. बनाएं पर क्लिक करें.

इंडेक्स फ़ील्ड, फ़ील्ड पाथ की सीमाओं के मुताबिक होने चाहिए.

क्वेरी के साइज़ के हिसाब से, इंडेक्स बनने में कुछ मिनट लग सकते हैं. बनाने के बाद, आप कंपोज़िट इंडेक्स सेक्शन. अगर वे अब भी बना रहे हैं, तो Firebase कंसोल में चुनें.

इंडेक्स हटाएं

इंडेक्स मिटाने के लिए:

  1. Firebase कंसोल के Cloud Firestore सेक्शन पर जाएं.
  2. इंडेक्स टैब पर क्लिक करें.
  3. जिस इंडेक्स को मिटाना है उस पर कर्सर घुमाएं. इसके बाद, संदर्भ मेन्यू से मिटाएं चुनें.
  4. सूचना से मिटाएं पर क्लिक करके, पुष्टि करें कि आपको इसे मिटाना है.

Firebase सीएलआई का इस्तेमाल करना

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

सिर्फ़ Cloud Firestore इंडेक्स और नियमों को डिप्लॉय करने के लिए, --only firestore फ़्लैग.

अगर Firebase कंसोल का इस्तेमाल करके, इंडेक्स में बदलाव किया जाता है, तो तो अपने लोकल इंडेक्स फ़ाइल को भी अपडेट करने का तरीका जानें. इससे संदर्भ लें JSON इंडेक्स की परिभाषा का रेफ़रंस.

टेराफ़ॉर्म का इस्तेमाल करें

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

Cloud Firestore डेटाबेस में एक फ़ील्ड इंडेक्स या कंपोज़िट इंडेक्स शामिल हो सकता है. अपने डेटाबेस के लिए इंडेक्स बनाने के लिए, टेरेस कॉन्फ़िगरेशन फ़ाइल में बदलाव किया जा सकता है.

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

टेराफ़ॉर्म कॉन्फ़िगरेशन फ़ाइल के नीचे दिए गए उदाहरण में, 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 की जगह अपना डेटाबेस आईडी डालें.

इंडेक्स बनाए जाने का समय

इंडेक्स बनाने के लिए, Cloud Firestore को इंडेक्स सेट अप करना होगा. इसके बाद, इंडेक्स को मौजूदा डेटा से बैकफ़िल करें. इंडेक्स बनाने में लगने वाला समय, सेटअप में लगने वाले कुल समय का योग होता है और बैकफ़िल का समय:

  • इंडेक्स सेट अप करने में कुछ मिनट लगते हैं. कम से कम बिल्ड इंडेक्स के लिए समय कुछ मिनट होते हैं, फिर चाहे डेटाबेस खाली हो.

  • बैकफ़िल करने में लगने वाला समय, इस बात पर निर्भर करता है कि नए इंडेक्स में कितना मौजूदा डेटा है. कॉन्टेंट बनाने इंडेक्स की डेफ़िनिशन से मैच करने वाली फ़ील्ड की ज़्यादा वैल्यू होती हैं. इससे इंडेक्स को बैकफ़िल करें.

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

इंडेक्स बनाना शुरू करने के बाद, Cloud Firestore, कार्रवाई को कोई अनन्य नाम दिया जाता है. ऑपरेशन के नामों से पहले projects/[PROJECT_ID]/databases/(default)/operations/, उदाहरण के लिए:

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

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

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

लंबे समय तक चलने वाली कार्रवाइयों की सूची बनाने के लिए, gcloud Firestore ऑपरेशन की सूची आदेश. इस निर्देश में, पहले से चल रही और हाल ही में पूरी की गई कार्रवाइयों की सूची दी गई है. ऑपरेशन पूरा होने के कुछ दिनों बाद तक सूची में यह जानकारी दिखती है:

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 वैल्यू मौजूद होने पर निर्भर नहीं करता है की अनुमति देता है.

इंडेक्स बनाने से जुड़ी गड़बड़ियां

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

अगर इंडेक्स नहीं बन पाता है, तो आपको कंसोल में गड़बड़ी का मैसेज दिखेगा. इस तारीख के बाद तो पता चलता है कि कहीं इंडेक्स करने की सीमा, तो फिर से इंडेक्स करने की कोशिश करें.