Query Explain की मदद से, बैकएंड में Cloud Firestore क्वेरी सबमिट की जा सकती हैं. इसके बदले में, आपको बैकएंड क्वेरी के लागू होने की परफ़ॉर्मेंस के बारे में पूरी जानकारी मिलती है. यह कई रिलेशनल डेटाबेस सिस्टम में EXPLAIN [ANALYZE] ऑपरेशन की तरह काम करता है.
Firestore सर्वर क्लाइंट लाइब्रेरी का इस्तेमाल करके, क्वेरी की जानकारी देने वाले अनुरोध भेजे जा सकते हैं.
Query Explain के नतीजों से आपको यह समझने में मदद मिलती है कि आपकी क्वेरी कैसे लागू होती हैं. इससे आपको क्वेरी में मौजूद गड़बड़ियों और सर्वर-साइड पर संभावित समस्याओं की जगह की जानकारी मिलती है.
क्वेरी के बारे में जानकारी:
- क्वेरी प्लानिंग फ़ेज़ के बारे में अहम जानकारी देता है, ताकि आप क्वेरी इंडेक्स में बदलाव कर सकें और परफ़ॉर्मेंस को बेहतर बना सकें.
- 'विश्लेषण करें' विकल्प का इस्तेमाल करके, हर क्वेरी के हिसाब से लागत और परफ़ॉर्मेंस को समझा जा सकता है. साथ ही, क्वेरी के इस्तेमाल को ऑप्टिमाइज़ करने के लिए, अलग-अलग क्वेरी पैटर्न को तुरंत दोहराया जा सकता है.
Query Explain के विकल्पों को समझना: डिफ़ॉल्ट और विश्लेषण
क्वेरी एक्सप्लेन की कार्रवाइयां, डिफ़ॉल्ट विकल्प या विश्लेषण करें विकल्प का इस्तेमाल करके की जा सकती हैं.
डिफ़ॉल्ट विकल्प के तौर पर, Query Explain क्वेरी को प्लान करता है, लेकिन उसे लागू करने के चरण को स्किप कर देता है. इससे प्लानर स्टेज की जानकारी मिलेगी. इसका इस्तेमाल करके, यह देखा जा सकता है कि किसी क्वेरी में ज़रूरी इंडेक्स मौजूद हैं या नहीं. साथ ही, यह भी समझा जा सकता है कि किन इंडेक्स का इस्तेमाल किया गया है. उदाहरण के लिए, इससे आपको यह पुष्टि करने में मदद मिलेगी कि कोई क्वेरी, कई अलग-अलग इंडेक्स को इंटरसेक्ट करने के बजाय, कंपोज़िट इंडेक्स का इस्तेमाल कर रही है.
विश्लेषण के विकल्प की मदद से, Query Explain दोनों प्लान की जानकारी देता है और क्वेरी को एक्ज़ीक्यूट करता है. इससे, पहले बताई गई प्लानर की सभी जानकारी के साथ-साथ, क्वेरी के लागू होने के रनटाइम के आंकड़े भी मिलते हैं. इसमें क्वेरी की बिलिंग जानकारी के साथ-साथ, क्वेरी के लागू होने के बारे में सिस्टम-लेवल की अहम जानकारी शामिल होगी. इस टूल का इस्तेमाल करके, अलग-अलग क्वेरी और इंडेक्स कॉन्फ़िगरेशन को टेस्ट किया जा सकता है. इससे उनकी लागत और इंतज़ार के समय को ऑप्टिमाइज़ किया जा सकता है.
Query Explain की सुविधा इस्तेमाल करने पर कितना शुल्क लगता है?
डिफ़ॉल्ट विकल्प के साथ क्वेरी एक्सप्लेन का इस्तेमाल करने पर, कोई इंडेक्स या रीड ऑपरेशन नहीं किया जाता. क्वेरी कितनी भी जटिल हो, एक रीड ऑपरेशन के लिए शुल्क लिया जाता है.
जब Query Explain का इस्तेमाल, विश्लेषण के विकल्प के साथ किया जाता है, तो इंडेक्स और रीड ऑपरेशन किए जाते हैं. इसलिए, आपसे क्वेरी के लिए सामान्य शुल्क लिया जाता है. विश्लेषण की गतिविधि के लिए कोई अतिरिक्त शुल्क नहीं लिया जाता. सिर्फ़ क्वेरी को लागू करने के लिए सामान्य शुल्क लिया जाता है.
डिफ़ॉल्ट विकल्प के साथ Query Explain का इस्तेमाल करना
डिफ़ॉल्ट विकल्प का अनुरोध सबमिट करने के लिए, क्लाइंट लाइब्रेरी का इस्तेमाल किया जा सकता है.
ध्यान दें कि अनुरोधों की पुष्टि IAM से की जाती है. इसके लिए, सामान्य क्वेरी ऑपरेशन वाली अनुमतियों का इस्तेमाल किया जाता है. पुष्टि करने की अन्य तकनीकों, जैसे कि Firebase Authentication को अनदेखा कर दिया जाता है. ज़्यादा जानकारी के लिए, सर्वर क्लाइंट लाइब्रेरी के लिए आईएएम से जुड़ी गाइड देखें.
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)"},
]
}ज़्यादा जानकारी के लिए, Query Explain रिपोर्ट का रेफ़रंस देखें.
'विश्लेषण करें' विकल्प के साथ क्वेरी की जानकारी देने वाली सुविधा का इस्तेमाल करना
क्लाइंट लाइब्रेरी का इस्तेमाल करके, विश्लेषण के विकल्प का अनुरोध सबमिट किया जा सकता है.
ध्यान दें कि अनुरोधों की पुष्टि IAM से की जाती है. इसके लिए, सामान्य क्वेरी ऑपरेशन वाली अनुमतियों का ही इस्तेमाल किया जाता है. पुष्टि करने की अन्य तकनीकों, जैसे कि Firebase Authentication को अनदेखा कर दिया जाता है. ज़्यादा जानकारी के लिए, सर्वर क्लाइंट लाइब्रेरी के लिए आईएएम से जुड़ी गाइड देखें.
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",
}
}
}ज़्यादा जानकारी के लिए, Query Explain रिपोर्ट का रेफ़रंस देखें.
नतीजों को समझना और बदलाव करना
आइए, एक उदाहरण देखते हैं. इसमें हम फ़िल्मों को उनकी शैली और प्रोडक्शन के देश के हिसाब से क्वेरी करते हैं.
उदाहरण के लिए, मान लें कि यह इस एसक्यूएल क्वेरी के बराबर है.
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", } } }