क्वेरी एक्सप्लेन की मदद से, बैकएंड में Cloud Firestore क्वेरी सबमिट की जा सकती हैं. साथ ही, बैकएंड क्वेरी के एक्सीक्यूशन पर परफ़ॉर्मेंस के बारे में ज़्यादा जानकारी वाले आंकड़े भी मिल सकते हैं. यह कई रिलेशनल डेटाबेस सिस्टम में, EXPLAIN [ANALYZE]
ऑपरेशन की तरह काम करता है.
क्वेरी के बारे में जानकारी देने के अनुरोध, Firestore सर्वर क्लाइंट लाइब्रेरी का इस्तेमाल करके भेजे जा सकते हैं.
क्वेरी एक्सप्लेन के नतीजों से आपको यह समझने में मदद मिलती है कि आपकी क्वेरी कैसे पूरी की जाती हैं. साथ ही, इससे आपको सर्वर साइड की संभावित रुकावटों की जगह और उनसे जुड़ी समस्याओं के बारे में जानकारी मिलती है.
क्वेरी के बारे में जानकारी:
- इससे आपको क्वेरी प्लानिंग के चरण के बारे में अहम जानकारी मिलती है, ताकि आप क्वेरी के इंडेक्स को अडजस्ट कर सकें और क्वेरी की परफ़ॉर्मेंस को बेहतर बना सकें.
- विश्लेषण विकल्प का इस्तेमाल करने से आपको हर क्वेरी के हिसाब से अपनी लागत और परफ़ॉर्मेंस को समझने में मदद मिलती है. साथ ही, उनके इस्तेमाल को ऑप्टिमाइज़ करने के लिए, अलग-अलग क्वेरी पैटर्न को तुरंत दोहराया जा सकता है.
क्वेरी के बारे में जानकारी देने के विकल्पों को समझना: डिफ़ॉल्ट और विश्लेषण
क्वेरी के बारे में जानकारी देने वाले ऑपरेशन, डिफ़ॉल्ट विकल्प या विश्लेषण करें विकल्प का इस्तेमाल करके किए जा सकते हैं.
डिफ़ॉल्ट विकल्प में, 'क्वेरी की जानकारी' सुविधा क्वेरी को प्लान करती है, लेकिन क्वेरी को एक्ज़ीक्यूशन के चरण से आगे बढ़ा देती है. इससे प्लानर के चरण की जानकारी मिलेगी. इसका इस्तेमाल करके, यह जांचा जा सकता है कि किसी क्वेरी में ज़रूरी इंडेक्स मौजूद हैं या नहीं. साथ ही, यह भी समझा जा सकता है कि किन इंडेक्स का इस्तेमाल किया गया है. उदाहरण के लिए, इसकी मदद से यह पुष्टि की जा सकती है कि कोई खास क्वेरी, कई अलग-अलग इंडेक्स के इंटरसेक्शन के बजाय, कंपोजिट इंडेक्स का इस्तेमाल कर रही है.
विश्लेषण करने के विकल्प की मदद से, क्वेरी, दोनों प्लान के बारे में बताती है और क्वेरी को लागू करती है. इससे, पहले बताई गई प्लानर की सभी जानकारी के साथ-साथ, क्वेरी एक्ज़ीक्यूशन के रनटाइम के आंकड़े भी दिखते हैं. इसमें क्वेरी की बिलिंग जानकारी के साथ-साथ, क्वेरी को लागू करने के बारे में सिस्टम-लेवल की अहम जानकारी भी शामिल होगी. इस टूल का इस्तेमाल करके, अलग-अलग क्वेरी और इंडेक्स कॉन्फ़िगरेशन की जांच की जा सकती है, ताकि उनकी लागत और इंतज़ार का समय ऑप्टिमाइज़ किया जा सके.
क्वेरी एक्सप्लेन की सुविधा का इस्तेमाल करने के लिए क्या शुल्क देना होगा?
डिफ़ॉल्ट विकल्प के साथ क्वेरी एक्सप्लेन का इस्तेमाल करने पर, कोई इंडेक्स या रीड ऑपरेशन नहीं किया जाता. क्वेरी की जटिलता पर ध्यान दिए बिना, एक रीड ऑपरेशन का शुल्क लिया जाता है.
'विश्लेषण करें' विकल्प के साथ क्वेरी एक्सप्लेन का इस्तेमाल करने पर, इंडेक्स और पढ़ने के ऑपरेशन किए जाते हैं. इसलिए, आपसे क्वेरी के लिए सामान्य शुल्क लिया जाता है. विश्लेषण गतिविधि के लिए कोई अतिरिक्त शुल्क नहीं लिया जाता. सिर्फ़ उस क्वेरी के लिए सामान्य शुल्क लिया जाता है जिसे लागू किया जा रहा है.
डिफ़ॉल्ट विकल्प के साथ क्वेरी एक्सप्लेन का इस्तेमाल करना
डिफ़ॉल्ट विकल्प का अनुरोध सबमिट करने के लिए, क्लाइंट लाइब्रेरी का इस्तेमाल किया जा सकता है.
ध्यान दें कि अनुरोधों की पुष्टि, IAM की मदद से की जाती है. इसके लिए, क्वेरी के सामान्य ऑपरेशन के लिए इस्तेमाल की जाने वाली अनुमतियों का इस्तेमाल किया जाता है. पुष्टि करने के अन्य तरीकों, जैसे कि Firebase Authentication को अनदेखा किया जाता है. ज़्यादा जानकारी के लिए, सर्वर क्लाइंट लाइब्रेरी के लिए IAM से जुड़ी गाइड देखें.
Java (एडमिन)
Query q = db.collection("col").whereGreaterThan("a", 1);
ExplainOptions options = ExplainOptions.builder().build();
ExplainResults<QuerySnapshot> explainResults = q.explain(options).get();
ExplainMetrics metrics = explainResults.getMetrics();
PlanSummary planSummary = metrics.getPlanSummary();
नोड (एडमिन)
const q = db.collection('col').where('country', '=', 'USA');
const options = { analyze : 'false' };
const explainResults = await q.explain(options);
const metrics = explainResults.metrics;
const plan = metrics.planSummary;
जवाब का सटीक फ़ॉर्मैट, उसे लागू करने के माहौल पर निर्भर करता है. मिले नतीजों को JSON में बदला जा सकता है. उदाहरण के लिए:
{ "indexes_used": [ {"query_scope": "Collection", "properties": "(category ASC, __name__ ASC)"}, {"query_scope": "Collection", "properties": "(country ASC, __name__ ASC)"}, ] }
ज़्यादा जानकारी के लिए, क्वेरी एक्सप्लेन रिपोर्ट का रेफ़रंस देखें.
'विश्लेषण करें' विकल्प के साथ क्वेरी एक्सप्लेन का इस्तेमाल करना
'विश्लेषण करें' विकल्प का अनुरोध सबमिट करने के लिए, क्लाइंट लाइब्रेरी का इस्तेमाल किया जा सकता है.
ध्यान दें कि अनुरोधों की पुष्टि, IAM की मदद से की जाती है. इसके लिए, क्वेरी के सामान्य ऑपरेशन के लिए इस्तेमाल की जाने वाली अनुमतियों का इस्तेमाल किया जाता है. पुष्टि करने के अन्य तरीकों, जैसे कि Firebase Authentication को अनदेखा किया जाता है. ज़्यादा जानकारी के लिए, सर्वर क्लाइंट लाइब्रेरी के लिए IAM से जुड़ी गाइड देखें.
Java (एडमिन)
Query q = db.collection("col").whereGreaterThan("a", 1);
ExplainOptions options = ExplainOptions.builder().setAnalyze(true).build();
ExplainResults<QuerySnapshot> explainResults = q.explain(options).get();
ExplainMetrics metrics = explainResults.getMetrics();
PlanSummary planSummary = metrics.getPlanSummary();
List<Map<String, Object>> indexesUsed = planSummary.getIndexesUsed();
ExecutionStats stats = metrics.getExecutionStats();
नोड (एडमिन)
const q = db.collection('col').where('country', '=', 'USA');
const options = { analyze : 'true' };
const explainResults = await q.explain(options);
const metrics = explainResults.metrics;
const plan = metrics.planSummary;
const indexesUsed = plan.indexesUsed;
const stats = metrics.executionStats;
इस उदाहरण में, planInfo
के साथ-साथ stats
ऑब्जेक्ट भी दिखाया गया है.
रिस्पॉन्स का सटीक फ़ॉर्मैट, एक्ज़ीक्यूशन के एनवायरमेंट के हिसाब से तय होता है. उदाहरण के तौर पर दिया गया रिस्पॉन्स, JSON फ़ॉर्मैट में है.
{ "resultsReturned": "5", "executionDuration": "0.100718s", "readOperations": "5", "debugStats": { "index_entries_scanned": "95000", "documents_scanned": "5" "billing_details": { "documents_billable": "5", "index_entries_billable": "0", "small_ops": "0", "min_query_cost": "0", } } }
ज़्यादा जानकारी के लिए, क्वेरी एक्सप्लेन रिपोर्ट का रेफ़रंस देखें.
नतीजों को समझना और उनमें बदलाव करना
आइए, एक उदाहरण देखते हैं. इसमें हमने फ़िल्मों को शैली और प्रोडक्शन की जगह के हिसाब से क्वेरी किया है.
उदाहरण के लिए, इस एसक्यूएल क्वेरी के बराबर की क्वेरी मान लें.
SELECT * FROM /movies WHERE category = 'Romantic' AND country = 'USA';
अगर हम विश्लेषण करने के विकल्प का इस्तेमाल करते हैं, तो दिखाई गई मेट्रिक में क्वेरी को दो सिंगल-फ़ील्ड इंडेक्स (category ASC, __name__ ASC)
और (country ASC, __name__ ASC)
पर चलाया जाता है. यह 16,500 इंडेक्स एंट्री को स्कैन करता है, लेकिन सिर्फ़ 1,200 दस्तावेज़ दिखाता है.
// Output query planning info { "indexes_used": [ {"query_scope": "Collection", "properties": "(category ASC, __name__ ASC)"}, {"query_scope": "Collection", "properties": "(country ASC, __name__ ASC)"}, ] } // Output query status { "resultsReturned": "1200", "executionDuration": "0.118882s", "readOperations": "1200", "debugStats": { "index_entries_scanned": "16500", "documents_scanned": "1200" "billing_details": { "documents_billable": "1200", "index_entries_billable": "0", "small_ops": "0", "min_query_cost": "0", } } }
क्वेरी को लागू करने की परफ़ॉर्मेंस को ऑप्टिमाइज़ करने के लिए, पूरी तरह कवर किया गया कंपोजिट इंडेक्स (category ASC, country ASC, __name__ ASC)
बनाया जा सकता है.
विश्लेषण करने के विकल्प के साथ क्वेरी को फिर से चलाने पर, हमें पता चलता है कि इस क्वेरी के लिए, हाल ही में बनाया गया इंडेक्स चुना गया है. साथ ही, क्वेरी ज़्यादा तेज़ी से और बेहतर तरीके से काम करती है.
// Output query planning info { "indexes_used": [ {"query_scope": "Collection", "properties": "(category ASC, country ASC, __name__ ASC)"} ] } // Output query stats { "resultsReturned": "1200", "executionDuration": "0.026139s", "readOperations": "1200", "debugStats": { "index_entries_scanned": "1200", "documents_scanned": "1200" "billing_details": { "documents_billable": "1200", "index_entries_billable": "0", "small_ops": "0", "min_query_cost": "0", } } }