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