Query Explain আপনাকে ব্যাকএন্ডে Cloud Firestore কোয়েরি জমা দিতে এবং বিনিময়ে ব্যাকএন্ড কোয়েরি এক্সিকিউশনের উপর বিস্তারিত পারফর্ম্যান্স পরিসংখ্যান পেতে দেয়। এটি অনেক রিলেশনাল ডেটাবেস সিস্টেমে EXPLAIN [ANALYZE] অপারেশনের মতো
কাজ করে।
Firestore সার্ভার ক্লায়েন্ট লাইব্রেরি ব্যবহার করে কোয়েরি ব্যাখ্যা করার অনুরোধ পাঠানো যেতে পারে।
কোয়েরি ব্যাখ্যা করার ফলাফল আপনাকে বুঝতে সাহায্য করে যে আপনার কোয়েরি কীভাবে এক্সিকিউট করা হয়, আপনাকে অদক্ষতা এবং সার্ভার-সাইড বাধার সম্ভাব্য লোকেশন দেখায়।
কোয়েরি ব্যাখ্যা:
- কোয়েরি প্ল্যানিং ফেজে ইনসাইট প্রদান করে যাতে আপনি কোয়েরি ইনডেক্স অ্যাডজাস্ট করতে এবং দক্ষতা বাড়াতে পারেন।
- বিশ্লেষণ করার বিকল্প ব্যবহার করলে, তা আপনাকে কোয়েরি প্রতি খরচ ও পারফর্ম্যান্স বুঝতে সাহায্য করে এবং ব্যবহার অপ্টিমাইজ করার জন্য বিভিন্ন কোয়েরি প্যাটার্ন দ্রুত পুনরাবৃত্তি করতে দেয়।
কোয়েরি ব্যাখ্যা করার বিকল্পগুলি বুঝুন: ডিফল্ট এবং বিশ্লেষণ করুন
ডিফল্ট বিকল্প বা বিশ্লেষণ করুন বিকল্প ব্যবহার করে কোয়েরি ব্যাখ্যা করার অপারেশন করা যেতে পারে।
ডিফল্ট বিকল্পের মাধ্যমে, Query Explain কোয়েরি প্ল্যান করে, কিন্তু এক্সিকিউশন স্টেজ এড়িয়ে যায়। এটি প্ল্যানার স্টেজ সংক্রান্ত তথ্য ফিরিয়ে দেবে। আপনি এটি ব্যবহার করে চেক করতে পারেন যে কোনও কোয়েরিতে প্রয়োজনীয় ইনডেক্স আছে কিনা এবং কোন ইনডেক্স ব্যবহার করা হয়েছে তা বুঝতে পারেন। এটি আপনাকে যাচাই করতে সাহায্য করবে, যেমন, একটি নির্দিষ্ট কোয়েরি অনেক বিভিন্ন ইন্ডেক্স জুড়ে ছেদ করার পরিবর্তে একটি কম্পোজিট ইন্ডেক্স ব্যবহার করছে।
বিশ্লেষণ করার বিকল্পের মাধ্যমে, কোয়েরি ব্যাখ্যা করার ফিচার কোয়েরি প্ল্যান ও এক্সিকিউট, দুটিই করে। এটি কোয়েরি এক্সিকিউশন রানটাইম থেকে পাওয়া পরিসংখ্যানের সাথে আগে উল্লেখ করা প্ল্যানার সংক্রান্ত সব তথ্য ফিরিয়ে আনে। এতে কোয়েরির বিলিং সংক্রান্ত তথ্য এবং কোয়েরি এক্সিকিউশন সম্পর্কে সিস্টেম-লেভেল ইনসাইট অন্তর্ভুক্ত থাকবে। আপনি এই টুলিং ব্যবহার করে বিভিন্ন কোয়েরি ও ইন্ডেক্স কনফিগারেশন পরীক্ষা করতে পারেন যাতে সেগুলির খরচ ও লেটেন্সি অপ্টিমাইজ করা যায়।
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();
Node (Admin)
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 (Admin)
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", } } }