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

इस पेज पर, Firestore Enterprise edition के इंडेक्स मैनेज करने का तरीका बताया गया है.

Firestore Enterprise edition के इंडेक्स के बारे में ज़्यादा जानने के लिए, इंडेक्स की खास जानकारी देखें.

शुरू करने से पहले

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

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

कोई भूमिका असाइन करने के लिए, कोई एक भूमिका असाइन करना लेख देखें. Cloud Firestore की भूमिकाओं और उनसे जुड़ी अनुमतियों के बारे में ज़्यादा जानने के लिए, पहले से तय की गई भूमिकाएं देखें.

अगर आपने पसंद के मुताबिक भूमिकाएं तय की हैं, तो इंडेक्स बनाने के लिए, ये सभी अनुमतियां असाइन करें:

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

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

इंडेक्स बनाने के लिए, यह तरीका अपनाएं:

Firebase कंसोल
  1. Firebase कंसोल में, Firestore डेटाबेस पेज पर जाएं.

    Firestore डेटाबेस पर जाएं

  2. डेटाबेस की सूची में से कोई डेटाबेस चुनें.
  3. इंडेक्स टैब में, इंडेक्स बनाएं पर क्लिक करें.
  4. कलेक्शन आईडी डालें.
  5. एक या उससे ज़्यादा फ़ील्ड पाथ जोड़ें और हर पाथ के लिए इंडेक्स का कोई विकल्प चुनें.
  6. फ़ील्ड की मौजूदगी का कोई विकल्प चुनें. जैसे, नॉन-स्पार्स या स्पार्स.
  7. बनाएं पर क्लिक करें.
  8. आपका नया इंडेक्स, इंडेक्स की सूची में दिखता है. साथ ही, Cloud Firestore आपके इंडेक्स को बनाना शुरू कर देता है. इंडेक्स बन जाने पर, आपको इंडेक्स के बगल में हरे रंग का सही का निशान दिखेगा. अगर इंडेक्स नहीं बनता है, तो संभावित वजहों के लिए, इंडेक्स बनाने में होने वाली गड़बड़ियां देखें.
gcloud CLI

इंडेक्स बनाने के लिए, gcloud firestore indexes composite create कमांड का इस्तेमाल करें.

gcloud firestore indexes composite create \
--database='DATABASE_ID' \
--collection-group=COLLECTION \
--field-config=FIELD_CONFIGURATION \
--query-scope=collection-group \
--density=dense

इन वैल्यू को बदलें:

  • DATABASE_ID: कोई डेटाबेस आईडी.
  • COLLECTION: किसी कलेक्शन का नाम.
  • FIELD_CONFIGURATION: कोई फ़ील्ड कॉन्फ़िगरेशन. हर फ़ील्ड के लिए, --field-config=field-path= जोड़ें. उदाहरण के लिए:
        --field-config=field-path=user-id,order=descending \
        --field-config=field-path=score,order=descending
        

    इन फ़ील्ड को कॉन्फ़िगर करने के बारे में ज़्यादा जानने के लिए, --field-config देखें.

स्पार्स इंडेक्स बनाने के लिए, --density=sparse-any सेट करें.

यूनीक इंडेक्स बनाने के लिए, --unique फ़्लैग जोड़ें.

Terraform

google_firestore_index संसाधन का इस्तेमाल करें.

resource "google_firestore_index" "index" {
  database    = "DATABASE_ID"
  collection  = "COLLECTION"
  query_scope = "COLLECTION_GROUP"

  // You can include multiple field blocks
  fields {
    field_path = "FIELD_PATH"
    order      = "ORDER"
  }

  // Optional
  multikey = true
  density  = "DENSITY"
}

इन वैल्यू को बदलें:

  • DATABASE_ID: चुने गए डेटाबेस का डेटाबेस आईडी
  • COLLECTION: इंडेक्स करने के लिए कलेक्शन का नाम
  • FIELD_PATH: इंडेक्स करने के लिए फ़ील्ड का नाम
  • ORDER: ASCENDING या DESCENDING में से कोई एक
  • DENSITY: SPARSE_ANY या DENSE में से कोई एक

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

टेक्स्ट इंडेक्स बनाने के लिए, Google Cloud Console का इस्तेमाल करें.

  1. Google Cloud Console में, डेटाबेस पेज पर जाएं.

    डेटाबेस पर जाएं

  2. डेटाबेस की सूची में से कोई डेटाबेस चुनें.

  3. नेविगेशन मेन्यू में, इंडेक्स पर क्लिक करें.

  4. ज़रूरी नहीं: इंडेक्स के लिए कोई नाम डालें.

  5. खोज का टाइप पर जाएं और टेक्स्ट चुनें.

  6. कलेक्शन आईडी डालें.

  7. इंडेक्स करने के लिए, एक या उससे ज़्यादा फ़ील्ड कॉन्फ़िगर करें.

  8. इंडेक्स के लिए क्वेरी स्कोप सेट करें.

  9. कोई डिफ़ॉल्ट भाषा चुनें.

  10. ज़रूरी नहीं: किसी ऐसे फ़ील्ड के नाम के लिए, भाषा को बदलने का पाथ सेट करें जिसमें किसी दस्तावेज़ की भाषा सेटिंग शामिल हो.

  11. बनाएं पर क्लिक करें.

  12. आपका नया इंडेक्स, इंडेक्स की सूची में दिखता है. साथ ही, Cloud Firestore आपके इंडेक्स को बनाना शुरू कर देता है. इंडेक्स बन जाने पर, इंडेक्स के बगल में हरे रंग का सही का निशान दिखता है.

जियोस्पेशल इंडेक्स बनाना

जियोस्पेशल इंडेक्स बनाने के लिए, Google Cloud Console का इस्तेमाल करें.

  1. Google Cloud Console में, डेटाबेस पेज पर जाएं.

    डेटाबेस पर जाएं

  2. डेटाबेस की सूची में से कोई डेटाबेस चुनें.

  3. नेविगेशन मेन्यू में, इंडेक्स पर क्लिक करें.

  4. ज़रूरी नहीं: इंडेक्स के लिए कोई नाम डालें.

  5. खोज का टाइप पर जाएं और जियो (2dsphere) चुनें.

  6. कलेक्शन आईडी डालें.

  7. इंडेक्स करने के लिए, एक या उससे ज़्यादा फ़ील्ड कॉन्फ़िगर करें.

  8. इंडेक्स के लिए क्वेरी स्कोप सेट करें.

  9. बनाएं पर क्लिक करें.

    आपका नया इंडेक्स, इंडेक्स की सूची में दिखता है. साथ ही, Cloud Firestore आपके इंडेक्स को बनाना शुरू कर देता है. इंडेक्स बन जाने पर, इंडेक्स के बगल में हरे रंग का सही का निशान दिखता है.

कोई इंडेक्स मिटाना

कोई इंडेक्स मिटाने के लिए, यह तरीका अपनाएं:

Firebase कंसोल
  1. Firebase कंसोल में, Firestore डेटाबेस पेज पर जाएं.

    Firestore डेटाबेस पर जाएं

  2. डेटाबेस की सूची में से कोई डेटाबेस चुनें.
  3. इंडेक्स टैब पर क्लिक करें.
  4. इंडेक्स की सूची में, उस इंडेक्स के लिए ज़्यादा बटन से मिटाएं चुनें जिसे आपको मिटाना है.
  5. इंडेक्स मिटाएं पर क्लिक करें.
gcloud CLI
  1. इंडेक्स का नाम ढूंढने के लिए, gcloud firestore indexes composite list कमांड का इस्तेमाल करें.

    gcloud firestore indexes composite list \
    --database='DATABASE_ID'

    DATABASE_ID को डेटाबेस आईडी से बदलें.

  2. इंडेक्स मिटाने के लिए, gcloud firestore indexes composite delete कमांड का इस्तेमाल करें.

    gcloud firestore indexes composite delete INDEX_NAME \
    --database='DATABASE_ID'

    इन वैल्यू को बदलें:

    • INDEX_NAME: किसी इंडेक्स का नाम
    • DATABASE_ID: कोई डेटाबेस आईडी

इंडेक्स बनाने में लगने वाला समय

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

  • किसी इंडेक्स को बनाने में कम से कम कुछ मिनट लगते हैं. भले ही, डेटाबेस खाली हो.

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

ज़्यादा समय तक चलने वाली कार्रवाइयों को मैनेज करना

इंडेक्स बनाना, ज़्यादा समय तक चलने वाली कार्रवाइयां होती हैं. यहां दिए गए सेक्शन में, इंडेक्स के लिए ज़्यादा समय तक चलने वाली कार्रवाइयों के साथ काम करने का तरीका बताया गया है.

इंडेक्स बनाना शुरू करने के बाद, Cloud Firestore उस कार्रवाई को कोई यूनीक नाम असाइन करता है. कार्रवाई के नामों में, projects/PROJECT_ID/databases/DATABASE_ID/operations/ प्रीफ़िक्स होता है. उदाहरण के लिए:

projects/PROJECT_ID/databases/DATABASE_ID/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 फ़ील्ड सेट नहीं है, तो इसका मतलब है कि कार्रवाई पूरी नहीं हुई है.