Query Explain আপনাকে ব্যাকএন্ডে Cloud Firestore কোয়েরি জমা দিতে এবং বিনিময়ে ব্যাকএন্ড কোয়েরি এক্সিকিউশনের বিস্তারিত কর্মক্ষমতা পরিসংখ্যান পেতে সাহায্য করে। এটি অনেক রিলেশনাল ডাটাবেস সিস্টেমে EXPLAIN [ANALYZE] অপারেশনের মতো কাজ করে।
ফায়ারস্টোর সার্ভার ক্লায়েন্ট লাইব্রেরি ব্যবহার করে কোয়েরি ব্যাখ্যার অনুরোধ পাঠানো যেতে পারে।
কোয়েরি ব্যাখ্যার ফলাফলগুলি আপনাকে বুঝতে সাহায্য করে যে আপনার কোয়েরিগুলি কীভাবে কার্যকর করা হয়, যা আপনাকে অদক্ষতা এবং সম্ভাব্য সার্ভার-সাইড বাধাগুলির অবস্থান দেখায়।
প্রশ্ন ব্যাখ্যা করুন:
- কোয়েরি পরিকল্পনা পর্যায়ে অন্তর্দৃষ্টি প্রদান করে যাতে আপনি আপনার কোয়েরি সূচীগুলি সামঞ্জস্য করতে পারেন এবং দক্ষতা বৃদ্ধি করতে পারেন।
- বিশ্লেষণ বিকল্পটি ব্যবহার করে, প্রতি-কোয়েরির ভিত্তিতে আপনার খরচ এবং কর্মক্ষমতা বুঝতে সাহায্য করে এবং বিভিন্ন কোয়েরি প্যাটার্নের ব্যবহার অপ্টিমাইজ করার জন্য আপনাকে দ্রুত পুনরাবৃত্তি করতে দেয়।
প্রশ্ন বুঝুন ব্যাখ্যা করুন বিকল্পগুলি: ডিফল্ট এবং বিশ্লেষণ করুন
ডিফল্ট বিকল্প বা বিশ্লেষণ বিকল্প ব্যবহার করে কোয়েরি ব্যাখ্যা অপারেশনগুলি সম্পাদন করা যেতে পারে।
ডিফল্ট বিকল্পের সাহায্যে, "Query Explain" কোয়েরিটি পরিকল্পনা করে, কিন্তু এক্সিকিউশন পর্যায়ের উপর দিয়ে চলে যায়। এটি পরিকল্পনাকারী পর্যায়ের তথ্য ফিরিয়ে দেবে। আপনি এটি ব্যবহার করে একটি কোয়েরিতে প্রয়োজনীয় সূচী আছে কিনা তা পরীক্ষা করতে এবং কোন সূচী ব্যবহার করা হয়েছে তা বুঝতে পারেন। এটি আপনাকে যাচাই করতে সাহায্য করবে, উদাহরণস্বরূপ, একটি নির্দিষ্ট কোয়েরি অনেকগুলি ভিন্ন সূচীর উপর ছেদ করার জন্য একটি কম্পোজিট সূচক ব্যবহার করছে।
বিশ্লেষণ বিকল্পের সাহায্যে, "Query Explain both plans" এবং "execute" উভয়ই ব্যবহার করা হয়। এটি পূর্বে উল্লিখিত সমস্ত প্ল্যানার তথ্য এবং কোয়েরি এক্সিকিউশন রানটাইম থেকে পরিসংখ্যান প্রদান করে। এতে কোয়েরির বিলিং তথ্য এবং কোয়েরি এক্সিকিউশনের সিস্টেম-স্তরের অন্তর্দৃষ্টি অন্তর্ভুক্ত থাকবে। আপনি এই টুলিং ব্যবহার করে বিভিন্ন কোয়েরি এবং সূচক কনফিগারেশন পরীক্ষা করতে পারেন যাতে তাদের খরচ এবং লেটেন্সি অপ্টিমাইজ করা যায়।
কোয়েরি ব্যাখ্যার খরচ কত?
যখন আপনি ডিফল্ট বিকল্পের সাথে "Query Explain" ব্যবহার করেন, তখন কোনও সূচক বা পঠন অপারেশন করা হয় না। কোয়েরির জটিলতা নির্বিশেষে, একটি পঠন অপারেশন চার্জ করা হয়।
যখন আপনি বিশ্লেষণ বিকল্পের সাহায্যে "Query Explain" ব্যবহার করেন, তখন সূচক এবং পঠন ক্রিয়াকলাপগুলি সম্পাদিত হয়, তাই আপনাকে যথারীতি প্রশ্নের জন্য চার্জ করা হয়। বিশ্লেষণ কার্যকলাপের জন্য কোনও অতিরিক্ত চার্জ নেই, শুধুমাত্র ক্যোয়ারী সম্পাদনের জন্য স্বাভাবিক চার্জ।
ডিফল্ট বিকল্পের সাথে Query Explain ব্যবহার করুন
আপনি একটি ডিফল্ট বিকল্প অনুরোধ জমা দিতে ক্লায়েন্ট লাইব্রেরি ব্যবহার করতে পারেন।
মনে রাখবেন যে অনুরোধগুলি IAM দিয়ে প্রমাণীকরণ করা হয়, নিয়মিত ক্যোয়ারী অপারেশনের জন্য একই অনুমতি ব্যবহার করে। অন্যান্য প্রমাণীকরণ কৌশল, যেমন Firebase Authentication , উপেক্ষা করা হয়। আরও তথ্যের জন্য, সার্ভার ক্লায়েন্ট লাইব্রেরির জন্য IAM- এর নির্দেশিকা দেখুন।
জাভা (অ্যাডমিন)
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 , উপেক্ষা করা হয়। আরও তথ্যের জন্য, সার্ভার ক্লায়েন্ট লাইব্রেরির জন্য IAM- এর নির্দেশিকা দেখুন।
জাভা (অ্যাডমিন)
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",
}
}
}আরও তথ্যের জন্য, কোয়েরি ব্যাখ্যা প্রতিবেদনের রেফারেন্স দেখুন।
ফলাফল ব্যাখ্যা করুন এবং সমন্বয় করুন
আসুন একটি উদাহরণের দৃশ্য দেখি যেখানে আমরা ধারা এবং প্রযোজনার দেশ অনুসারে সিনেমাগুলি জিজ্ঞাসা করি।
উদাহরণস্বরূপ, এই SQL কোয়েরির সমতুল্য ধরে নিন।
SELECT * FROM /movies WHERE category = 'Romantic' AND country = 'USA';
যদি আমরা বিশ্লেষণ বিকল্পটি ব্যবহার করি, তাহলে ফেরত আসা মেট্রিক্স দেখায় যে কোয়েরিটি দুটি একক-ক্ষেত্র সূচকে (category ASC, __name__ ASC) এবং (country ASC, __name__ ASC) তে চলে। এটি ১৬৫০০ সূচক এন্ট্রি স্ক্যান করে, কিন্তু মাত্র ১২০০টি নথি ফেরত দেয়।
// 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", } } }