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

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

गड़बड़ी के मैसेज की मदद से, इंडेक्स जोड़ना

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

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

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

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

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

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

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

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

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

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

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

Terraform का इस्तेमाल करना

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

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

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

यहां दिए गए उदाहरण में, 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 operations list कमांड का इस्तेमाल करें. इस निर्देश में, पहले से चल रही और हाल ही में पूरी की गई कार्रवाइयों की सूची दी गई है. ऑपरेशन पूरा होने के कुछ दिनों तक, उसकी जानकारी दिखती है:

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

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