Firestore Enterprise वर्शन के इंडेक्स के बारे में ज़्यादा जानने के लिए, इंडेक्स की खास जानकारी देखें.
शुरू करने से पहले
Cloud Firestore में इंडेक्स बनाने के लिए, पक्का करें कि आपको इनमें से कोई भूमिका असाइन की गई हो:
roles/datastore.ownerroles/datastore.indexAdminroles/editorroles/owner
भूमिका असाइन करने के लिए, कोई भूमिका असाइन करना लेख पढ़ें. Cloud Firestore भूमिकाओं और उनसे जुड़ी अनुमतियों के बारे में ज़्यादा जानने के लिए, पहले से तय की गई भूमिकाएं लेख पढ़ें.
अगर आपने कस्टम भूमिकाएं तय की हैं, तो इंडेक्स बनाने के लिए ये सभी अनुमतियां असाइन करें:
datastore.indexes.createdatastore.indexes.deletedatastore.indexes.getdatastore.indexes.listdatastore.indexes.update
इंडेक्स बनाना
इंडेक्स बनाने के लिए, यह तरीका अपनाएं:
Firebase कंसोल
-
Firebase कंसोल में, Firestore डेटाबेस पेज पर जाएं.
- डेटाबेस की सूची में से कोई डेटाबेस चुनें.
- इंडेक्स टैब में, इंडेक्स बनाएं पर क्लिक करें.
- कलेक्शन आईडी डालें.
- एक या उससे ज़्यादा फ़ील्ड पाथ जोड़ें और हर फ़ील्ड पाथ के लिए इंडेक्स का विकल्प चुनें.
- फ़ील्ड की मौजूदगी का कोई विकल्प चुनें. यह विकल्प, नॉन-स्पार्स या स्पार्स हो सकता है.
- बनाएं पर क्लिक करें.
- आपका नया इंडेक्स, इंडेक्स की सूची में दिखता है. साथ ही, 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में से कोई एक
इंडेक्स मिटाना
किसी इंडेक्स को मिटाने के लिए, यह तरीका अपनाएं:
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 को इंडेक्स बनाना होगा. इसके बाद, मौजूदा डेटा के साथ इंडेक्स एंट्री को बैकफ़िल करना होगा. किसी इंडेक्स को बनाने में लगने वाला समय, इन बातों पर निर्भर करता है:
किसी इंडेक्स को बनाने में कम से कम कुछ मिनट लगते हैं. भले ही, डेटाबेस खाली हो.
इंडेक्स की एंट्री को बैकफ़िल करने में लगने वाला समय, इस बात पर निर्भर करता है कि मौजूदा डेटा का कितना हिस्सा नए इंडेक्स में शामिल है. इंडेक्स की परिभाषा से मेल खाने वाली फ़ील्ड वैल्यू जितनी ज़्यादा होंगी, इंडेक्स की एंट्री को वापस भरने में उतना ही ज़्यादा समय लगेगा.
ज़्यादा समय तक चलने वाली कार्रवाइयों को मैनेज करना
इंडेक्स बनाने की प्रोसेस, ज़्यादा समय तक चलने वाली कार्रवाई होती है. यहां दिए गए सेक्शन में, इंडेक्स के लिए लंबे समय तक चलने वाली कार्रवाइयों को मैनेज करने का तरीका बताया गया है.
इंडेक्स बनाना शुरू करने के बाद, 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 फ़ील्ड सेट नहीं है, तो इसका मतलब है कि कार्रवाई पूरी नहीं हुई है.