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 सीएलआई डिफ़ॉल्ट रूप से एक JSON फ़ाइल जनरेट करता है सही फ़ॉर्मैट में इंडेक्स करें. ज़्यादा इंडेक्स जोड़ने के लिए, फ़ाइल में बदलाव करें और उसे डिप्लॉय करें firebase deploy निर्देश के साथ.

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

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

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

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

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

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

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

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