यह सिर्फ़ Cloud Firestore Enterprise वर्शन के लिए काम का है. |
इस पेज पर, इंडेक्स मैनेज करने का तरीका बताया गया है. इंडेक्स के बारे में ज़्यादा जानने के लिए, इंडेक्स की खास जानकारी देखें.
शुरू करने से पहले
MongoDB के साथ काम करने वाले 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
इंडेक्स बनाना
इंडेक्स बनाने के लिए, यह तरीका अपनाएं:
MongoDB API
इंडेक्स बनाने के लिए, createIndex()
तरीके का इस्तेमाल करें. उदाहरण के लिए:
-
db.restaurants.createIndex({"cuisine" : 1})
-
db.restaurants.createIndex({"cuisine" : 1}, {sparse: true})
-
db.runCommand()
का इस्तेमाल करके इंडेक्स बनाने की सुविधा भी उपलब्ध है. हालांकि, इसके लिए सिर्फ़ एक इंडेक्स का इस्तेमाल किया जा सकता है.db.runCommand({"createIndexes":"restaurant", "index": [{"key": {"cuisine":1}, {"name": "cuisine_index"}]})
इन बातों का ध्यान रखें:
- हर अनुरोध के लिए, सिर्फ़ एक इंडेक्स बनाया जा सकता है.
db.collection.createIndexes()
का इस्तेमाल नहीं किया जा सकता. - MongoDB API की मदद से इंडेक्स बनाने के लिए, ऑडिट लॉग में
google.firestore.admin.v1.FirestoreAdmin.CreateIndex
तरीके का नाम इस्तेमाल किया जाता है. - इंडेक्स के साथ काम करने वाले विकल्पों के बारे में जानने के लिए, इंडेक्स और इंडेक्स प्रॉपर्टी देखें.
Firebase कंसोल
-
Firebase कंसोल में, Firestore डेटाबेस पेज पर जाएं.
- डेटाबेस की सूची में से कोई डेटाबेस चुनें.
- इंडेक्स टैब में, इंडेक्स बनाएं पर क्लिक करें.
- कलेक्शन आईडी डालें.
- एक या उससे ज़्यादा फ़ील्ड पाथ जोड़ें और हर फ़ील्ड पाथ के लिए इंडेक्स का विकल्प चुनें.
- फ़ील्ड की मौजूदगी का विकल्प चुनें. यह विकल्प, नॉन-स्पार्स या स्पार्स हो सकता है.
- अगर चाहें, तो मल्टीकी इंडेक्स विकल्प सेट किया जा सकता है.
- बनाएं पर क्लिक करें.
- आपका नया इंडेक्स, इंडेक्स की सूची में दिखता है. साथ ही, Cloud Firestore with MongoDB compatibility आपके इंडेक्स को बनाना शुरू कर देता है. इंडेक्स बन जाने पर, आपको इंडेक्स के बगल में हरे रंग का सही का निशान दिखेगा. अगर इंडेक्स नहीं बनाया गया है, तो इसकी संभावित वजहें जानने के लिए, इंडेक्स बनाने से जुड़ी गड़बड़ियां देखें.
gcloud CLI
इंडेक्स बनाने के लिए, gcloud firestore indexes composite create
कमांड का इस्तेमाल करें. api-scope
को mongodb-compatible-api
पर सेट करें.
gcloud firestore indexes composite create \ --database='DATABASE_ID' \ --collection-group=COLLECTION \ --field-config=FIELD_CONFIGURATION \ --query-scope=collection-group \ --density=dense \ --api-scope=mongodb-compatible-api
इनकी जगह ये डालें:
- 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
सेट करें.
एक से ज़्यादा कुंजियों वाला इंडेक्स बनाने के लिए, --multikey
फ़्लैग जोड़ें.
यूनीक इंडेक्स बनाने के लिए, --unique
फ़्लैग जोड़ें.
Terraform
google_firestore_index
रिसॉर्स का इस्तेमाल करें. साथ ही, api_scope
को MONGODB_COMPATIBLE_API
और query_scope
को COLLECTION_GROUP
पर सेट करें.
resource "google_firestore_index" "index" { database = "DATABASE_ID" collection = "COLLECTION" api_scope = "MONGODB_COMPATIBLE_API" 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
में से कोई एक
इंडेक्स मिटाना
किसी इंडेक्स को मिटाने के लिए, यह तरीका अपनाएं:
MongoDB API
किसी इंडेक्स को मिटाने के लिए, dropIndex()
तरीके का इस्तेमाल करें. उदाहरण के लिए:
इंडेक्स के नाम का इस्तेमाल करके इंडेक्स मिटाना
db.restaurants.dropIndex("cuisine_index")
इंडेक्स की परिभाषा का इस्तेमाल करके इंडेक्स मिटाना
db.restaurants.dropIndex({"cuisine" : 1})
Firebase कंसोल
-
Firebase कंसोल में, Firestore डेटाबेस पेज पर जाएं.
- डेटाबेस की सूची में से कोई डेटाबेस चुनें.
- इंडेक्स टैब पर क्लिक करें.
- इंडेक्स की सूची में, उस इंडेक्स के लिए ज़्यादा बटन से मिटाएं चुनें जिसे आपको मिटाना है.
- Delete Index पर क्लिक करें.
gcloud CLI
इंडेक्स का नाम ढूंढने के लिए,
gcloud firestore indexes composite list
कमांड का इस्तेमाल करें.gcloud firestore indexes composite list \ --database='DATABASE_ID'
DATABASE_ID को डेटाबेस आईडी से बदलें.
-
इंडेक्स मिटाने के लिए,
gcloud firestore indexes composite delete
कमांड का इस्तेमाल करें.gcloud firestore indexes composite delete INDEX_NAME \ --database='DATABASE_ID'
इनकी जगह ये डालें:
- INDEX_NAME: इंडेक्स का नाम
- DATABASE_ID: डेटाबेस आईडी
इंडेक्स बनाने में लगा समय
इंडेक्स बनाने के लिए, Cloud Firestore with MongoDB compatibility को इंडेक्स बनाना होगा. इसके बाद, मौजूदा डेटा के साथ इंडेक्स एंट्री को फिर से भरना होगा. किसी इंडेक्स को बनाने में लगने वाला समय, इन बातों पर निर्भर करता है:
किसी इंडेक्स को बनाने में कम से कम कुछ मिनट लगते हैं. भले ही, डेटाबेस खाली हो.
इंडेक्स की एंट्री को बैकफ़िल करने में लगने वाला समय, इस बात पर निर्भर करता है कि मौजूदा डेटा का कितना हिस्सा नए इंडेक्स में शामिल है. इंडेक्स की परिभाषा से मेल खाने वाली फ़ील्ड वैल्यू जितनी ज़्यादा होंगी, इंडेक्स की एंट्री को वापस भरने में उतना ही ज़्यादा समय लगेगा.
ज़्यादा समय तक चलने वाली कार्रवाइयों को मैनेज करना
इंडेक्स बनाने की प्रोसेस, ज़्यादा समय तक चलने वाली कार्रवाई होती है. यहां दिए गए सेक्शन में, इंडेक्स के लिए लंबे समय तक चलने वाली कार्रवाइयों को मैनेज करने का तरीका बताया गया है.
इंडेक्स बनाना शुरू करने के बाद, Cloud Firestore with MongoDB compatibility, ऑपरेशन को एक यूनीक नाम असाइन करता है. कार्रवाई के नामों में 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
फ़ील्ड सेट नहीं है, तो इसका मतलब है कि कार्रवाई पूरी नहीं हुई है.