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