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 कंसोल के Cloud Firestore सेक्शन पर जाएं.
- इंडेक्स टैब पर जाएं और इंडेक्स जोड़ें पर क्लिक करें.
- कलेक्शन का नाम डालें और वे फ़ील्ड सेट करें जिनके हिसाब से आपको इंडेक्स को क्रम में लगाना है.
- बनाएं पर क्लिक करें.
इंडेक्स फ़ील्ड, फ़ील्ड पाथ की सीमाओं के मुताबिक होने चाहिए.
क्वेरी के साइज़ के हिसाब से, इंडेक्स बनने में कुछ मिनट लग सकते हैं. इन्हें बनाने के बाद, कंपोज़िट इंडेक्स सेक्शन में अपने इंडेक्स और उनकी स्थिति देखी जा सकती है. अगर ऐप्लिकेशन अब भी बन रहा है, तो Firebase कंसोल में, ऐप्लिकेशन के बनने की स्थिति दिखाने वाला बार दिखेगा.
इंडेक्स हटाना
इंडेक्स मिटाने के लिए:
- Firebase कंसोल के Cloud Firestore सेक्शन पर जाएं.
- इंडेक्स टैब पर क्लिक करें.
- जिस इंडेक्स को मिटाना है उस पर कर्सर घुमाएं और संदर्भ मेन्यू से मिटाएं को चुनें.
- सूचना में जाकर, मिटाएं पर क्लिक करके पुष्टि करें कि आपको इसे मिटाना है.
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 को इंडेक्स किए जा रहे डेटा में कोई समस्या मिलती है, तो हो सकता है कि इंडेक्स करने की कार्रवाई फ़ेल हो जाए. आम तौर पर, इसका मतलब है कि आपकी साइट इंडेक्स सीमा तक पहुंच जाती है. उदाहरण के लिए, हो सकता है कि यह कार्रवाई हर दस्तावेज़ के लिए, इंडेक्स एंट्री की तय सीमा तक पहुंच गई हो.
अगर इंडेक्स बनाने में कोई गड़बड़ी होती है, तो आपको कंसोल में गड़बड़ी का मैसेज दिखेगा. इंडेक्स की सीमाओं को पूरा न करने की पुष्टि करने के बाद, इंडेक्स करने की प्रोसेस फिर से शुरू करें.