অনেক Google Ads অ্যাপ্লিকেশনের একটি মূল কাজ হল ডেটা বিশ্লেষণ, গ্রাহকের প্রশ্ন এবং নীতি সম্মতি যাচাইয়ের মতো ব্যবহারের জন্য অ্যাকাউন্ট ডেটা পুনরুদ্ধার করা। ডেটা আনার সময়, আপনার ব্যবহারটি অপ্টিমাইজ করা উচিত যাতে Google সার্ভারগুলি অতিরিক্ত চাপ না পড়ে, অথবা রেট সীমিত হওয়ার ঝুঁকি না থাকে। আরও বিস্তারিত জানার জন্য, রেট-সীমাবদ্ধকরণ এবং একটি আপ-টু-ডেট যোগাযোগ ইমেল ঠিকানা বজায় রাখার নির্দেশিকাগুলি দেখুন।
রিপোর্টের জন্য Google এর রিসোর্স ব্যবহারের নীতি বুঝুন
সার্ভারের স্থিতিশীলতা নিশ্চিত করার জন্য, Google Ads API, GoogleAdsService.Search এবং GoogleAdsService.SearchStream কোয়েরি প্যাটার্নগুলিকে থ্রোটল করে যা অতিরিক্ত পরিমাণে API রিসোর্স ব্যবহার করে। যদি কোনও নির্দিষ্ট কোয়েরি প্যাটার্ন থ্রোটল করা হয়, তবে অন্যান্য পরিষেবা, পদ্ধতি এবং কোয়েরি প্যাটার্নগুলি প্রভাবিত না হয়ে কাজ করতে থাকবে। থ্রোটল করা অনুরোধগুলির জন্য নিম্নলিখিত ত্রুটিগুলি থ্রোটল করা হয়:
| ত্রুটি কোড |
|---|
উচ্চ রিসোর্স ব্যবহারের সময়কালের উপর নির্ভর করে QuotaError.EXCESSIVE_SHORT_TERM_QUERY_RESOURCE_CONSUMPTION অথবা QuotaError.EXCESSIVE_LONG_TERM_QUERY_RESOURCE_CONSUMPTION । |
যদি আপনি এই ত্রুটিগুলির সম্মুখীন হন, তাহলে QuotaError.EXCESSIVE_SHORT_TERM_QUERY_RESOURCE_CONSUMPTION দিয়ে ব্যর্থ অনুরোধগুলি পুনরায় চেষ্টা করার আগে 5 মিনিট অপেক্ষা করুন, এবং QuotaError.EXCESSIVE_LONG_TERM_QUERY_RESOURCE_CONSUMPTION দিয়ে ব্যর্থ অনুরোধগুলির জন্য 30 মিনিট অপেক্ষা করুন।
আপনার ব্যয়বহুল প্রতিবেদনগুলি সনাক্ত এবং নিরীক্ষণে আপনাকে সাহায্য করার জন্য, আমরা পৃথক প্রতিবেদনের জন্য একটি খরচ মেট্রিকও ফেরত দেব।
| পদ্ধতি | খরচ ক্ষেত্র |
|---|---|
GoogleAdsService.Search | SearchGoogleAdsResponse.query_resource_consumption |
GoogleAdsService.SearchStream | SearchGoogleAdsStreamResponse.query_resource_consumption |
এই ক্ষেত্রগুলি দ্বারা প্রদত্ত খরচের মেট্রিক বিভিন্ন কারণের উপর নির্ভর করে যেমন
- আপনার অ্যাকাউন্টের আকার
- আপনার রিপোর্টে আপনি যে ভিউ এবং কলামগুলি পাবেন
- Google Ads API সার্ভারের উপর চাপ।
ব্যয়বহুল কোয়েরি ট্র্যাক করতে আপনাকে সাহায্য করার জন্য, আমরা আমাদের সার্ভারে দেখা বিভিন্ন কোয়েরি প্যাটার্নের রিসোর্স খরচের প্রাথমিক সমষ্টিগত পরিসংখ্যান প্রকাশ করছি। আপনার কোয়েরিগুলিকে আরও উন্নত করতে সাহায্য করার জন্য আমরা পর্যায়ক্রমে আপডেট করা সংখ্যা প্রকাশ করব।
| সময়সূচী | গড় (পৃষ্ঠা ৫০)। | P70 (মাঝারিভাবে উচ্চ) | P95 (খুব বেশি) |
|---|---|---|---|
| স্বল্পমেয়াদী (৫ মিনিট) | ৬০০০ | ৩০০০০ | ১৮০০০০০ |
| দীর্ঘমেয়াদী (২৪ ঘন্টা)। | ১৬০০০ | ৯০০০০ | ৮৪০০০০০ |
উদাহরণস্বরূপ, ধরে নিন আপনি নিম্নরূপ একটি কোয়েরি প্যাটার্ন চালাচ্ছেন, যা প্রতি রিপোর্টে 600 ইউনিট রিসোর্স খরচ করে।
SELECT campaign.id, campaign.name, metrics.cost_micros FROM campaign WHERE
segments.date = "YYYY-MM-DD"
segments.date ফিল্টারের জন্য বিভিন্ন মান প্রতিস্থাপন করে আপনি একাধিক গ্রাহক অ্যাকাউন্টের জন্য এই কোয়েরিটি একাধিক পৃথক তারিখের জন্য চালাতে পারেন। নিম্নলিখিত টেবিলটি একটি নির্দিষ্ট সময় উইন্ডোতে আপনি কতগুলি প্রতিবেদন চালাতে পারেন তা দেখায় যাতে আপনার রিসোর্স ব্যবহার বিভিন্ন রিসোর্স ব্যবহারের বাকেটের সাথে খাপ খায়।
| সময়সূচী | গড় | মাঝারিভাবে বেশি | খুব উঁচু |
|---|---|---|---|
| স্বল্পমেয়াদী (৫ মিনিট) | ১০ | ৫০ | ৩০০০ |
| দীর্ঘমেয়াদী (২৪ ঘন্টা)। | ২৬ | ১৫০ | ১৪০০০ |
এই কোয়েরি প্যাটার্নটি ৫ মিনিটে ১০ বার চালালে গড় ব্যবহার হিসেবে গণ্য হবে, যেখানে ৫ মিনিটে ৩০০০ রিপোর্ট চালানো হলে তা খুব বেশি ব্যবহার হিসেবে গণ্য হবে।
আপনার প্রতিবেদনের সম্পদের ব্যবহার অপ্টিমাইজ করার জন্য বেশ কয়েকটি কৌশল রয়েছে। এই নির্দেশিকার বাকি অংশে এই কৌশলগুলির কিছু অন্তর্ভুক্ত রয়েছে।
আপনার ডেটা ক্যাশে করুন
API সার্ভার থেকে আনা সত্তার বিবরণ স্থানীয় ডাটাবেসে ক্যাশে করা উচিত, প্রতিবার ডেটার প্রয়োজন হলে সার্ভারে কল করার পরিবর্তে, বিশেষ করে যেসব সত্তা ঘন ঘন অ্যাক্সেস করা হয় বা কদাচিৎ পরিবর্তিত হয় তাদের জন্য। ফলাফল সিঙ্ক করার পর থেকে কোন বস্তুগুলি পরিবর্তিত হয়েছে তা সনাক্ত করতে যেখানে সম্ভব change-event এবং change-status ব্যবহার করুন।
চলমান প্রতিবেদনের ফ্রিকোয়েন্সি অপ্টিমাইজ করুন
ডেটা ফ্রেশনেস এবং কত ঘন ঘন ডেটা আপডেট করা হবে সে সম্পর্কে Google Ads নির্দেশিকা প্রকাশ করেছে । কত ঘন ঘন রিপোর্ট আনতে হবে তা নির্ধারণ করতে আপনার এই নির্দেশিকা ব্যবহার করা উচিত।
যদি আপনার নিয়মিত অ্যাকাউন্ট আপডেট করার প্রয়োজন হয়, তাহলে আমরা আপনাকে এই ধরনের অ্যাকাউন্টের সংখ্যা একটি ছোট সেটের মধ্যে সীমাবদ্ধ রাখার পরামর্শ দিচ্ছি, উদাহরণস্বরূপ, শুধুমাত্র শীর্ষ বিশটি Google বিজ্ঞাপন অ্যাকাউন্ট। বাকিগুলি কম ফ্রিকোয়েন্সিতে আপডেট করা যেতে পারে, উদাহরণস্বরূপ, দিনে একবার বা দুবার।
আপনার রিপোর্টের আকার অপ্টিমাইজ করুন
আপনার অ্যাপ্লিকেশনটি প্রচুর সংখ্যক ছোট প্রতিবেদন চালানোর পরিবর্তে প্রচুর পরিমাণে ডেটা সংগ্রহ করবে। এই পছন্দের ক্ষেত্রে একটি গুরুত্বপূর্ণ বিষয় হল অ্যাকাউন্টের সীমা ।
উদাহরণস্বরূপ, নিম্নলিখিত কোডটি বিবেচনা করুন যা নির্দিষ্ট বিজ্ঞাপন গোষ্ঠীর জন্য পরিসংখ্যান সংগ্রহ করে এবং একটি পরিসংখ্যান ডাটাবেস টেবিল আপডেট করে:
List<long> adGroupIds = FetchAdGroupIdsFromLocalDatabase();
foreach (long adGroupId in adGroupIds)
{
string query = "SELECT ad_group.id, ad_group.name, metrics.clicks, " +
"metrics.cost_micros, metrics.impressions, segments.date FROM " +
"ad_group WHERE segments.date DURING LAST_7_DAYS AND " +
"ad_group.id = ${adGroupId}";
List<GoogleAdsRow> rows = RunGoogleAdsReport(customerId, query);
InsertRowsIntoStatsTable(adGroupId, rows);
}
এই কোডটি একটি ছোট টেস্ট অ্যাকাউন্টে ভালো কাজ করে। তবে, Google Ads প্রতি ক্যাম্পেইন ২০,০০০টি পর্যন্ত বিজ্ঞাপন গ্রুপ এবং প্রতি অ্যাকাউন্টে ১০,০০০টি প্রচারণা সমর্থন করে। তাই যদি এই কোডটি একটি বৃহৎ Google Ads অ্যাকাউন্টের বিরুদ্ধে চলে, তাহলে এটি Google Ads API সার্ভারগুলিকে ওভারলোড করতে পারে, যার ফলে রেট সীমাবদ্ধতা এবং থ্রোটলিং হতে পারে।
একটি ভাল পদ্ধতি হল একটি একক প্রতিবেদন চালানো এবং স্থানীয়ভাবে এটি প্রক্রিয়া করা। একটি ইন-মেমরি মানচিত্র ব্যবহার করে এরকম একটি পদ্ধতি দেখানো হয়েছে।
Hashset<long> adGroupIds = FetchAdGroupIdsFromLocalDatabase();
string query = "SELECT ad_group.id, ad_group.name, metrics.clicks, " +
"metrics.cost_micros, metrics.impressions, segments.date FROM " +
"ad_group WHERE segments.date DURING LAST_7_DAYS";
List<GoogleAdsRow> rows = RunGoogleAdsReport(customer_id, query);
var memoryMap = new Dictionary<long, List<GoogleAdsRow>>();
for each (GoogleAdsRow row in rows)
{
var adGroupId = row.AdGroup.Id;
if (adGroupIds.Contains(adGroupId))
{
CheckAndAddRowIntoMemoryMap(row, adGroupId, memoryMap);
}
}
foreach (long adGroupId in memoryMap.Keys())
{
InsertRowsIntoStatsTable(adGroupId, rows);
}
কম সংখ্যক রিপোর্ট চালানোর কারণে এটি Google Ads API সার্ভারের উপর লোড কমিয়ে দেয়।
যদি আপনি দেখেন যে রিপোর্টটি মেমোরিতে ধরে রাখার জন্য খুব বড়, তাহলে আপনি এইভাবে একটি LIMIT ধারা যোগ করে কোয়েরিটিকে ছোট ছোট গ্রুপে ভেঙে ফেলতে পারেন:
SELECT
ad_group.id,
ad_group.name,
metrics.clicks,
metrics.cost_micros,
metrics.impressions,
segments.date
FROM ad_group
WHERE segments.date DURING LAST_7_DAYS
AND ad_group.id IN (id1, id2, ...)
LIMIT 100000
লেবেল হল এন্টিটিগুলিকে গ্রুপ করার এবং রিপোর্টিং কোয়েরির সংখ্যা কমানোর আরেকটি উপায়। আরও জানতে লেবেল গাইড দেখুন।
আপনি যা আনবেন তা অপ্টিমাইজ করুন
প্রতিবেদন চালানোর সময়, আপনার প্রশ্নের মধ্যে কোন কলামগুলি অন্তর্ভুক্ত করবেন সে সম্পর্কে আপনার সচেতন থাকা উচিত। নিম্নলিখিত উদাহরণটি বিবেচনা করুন যা প্রতি ঘন্টায় চালানোর জন্য নির্ধারিত:
SELECT
customer.id,
customer.currency_code,
campaign.id,
campaign.name,
ad_group.id,
ad_group.name,
ad_group_criterion.keyword.match_type,
ad_group_criterion.keyword.text,
ad_group_criterion.criterion_id,
ad_group_criterion.quality_info.creative_quality_score,
ad_group_criterion.system_serving_status,
ad_group_criterion.negative,
ad_group_criterion.quality_info.quality_score,
ad_group_criterion.quality_info.search_predicted_ctr,
ad_group_criterion.quality_info.post_click_quality_score,
metrics.historical_landing_page_quality_score,
metrics.search_click_share,
metrics.historical_creative_quality_score,
metrics.clicks,
metrics.impressions
FROM keyword_view
WHERE segments.date DURING LAST_7_DAYS
প্রতি ঘন্টায় পরিবর্তনের সম্ভাবনা থাকা একমাত্র কলামগুলি হল metrics.clicks এবং metrics.impressions । অন্যান্য সমস্ত কলাম কদাচিৎ আপডেট করা হয় বা একেবারেই আপডেট করা হয় না, তাই প্রতি ঘন্টায় এগুলি আনা অত্যন্ত অদক্ষ। আপনি এই মানগুলি একটি স্থানীয় ডাটাবেসে সংরক্ষণ করতে পারেন এবং দিনে একবার বা দুবার পরিবর্তনগুলি ডাউনলোড করার জন্য একটি change-event বা change-status রিপোর্ট চালাতে পারেন।
কিছু ক্ষেত্রে, উপযুক্ত ফিল্টার প্রয়োগ করে আপনি ডাউনলোড করা সারিগুলির সংখ্যা কমাতে পারেন।
অব্যবহৃত অ্যাকাউন্টগুলি পরিষ্কার করুন
যদি আপনার অ্যাপ্লিকেশনটি তৃতীয় পক্ষের গ্রাহক অ্যাকাউন্ট পরিচালনা করে, তাহলে আপনাকে গ্রাহক পরিবর্তনের কথা মাথায় রেখে আপনার অ্যাপ্লিকেশনটি তৈরি করতে হবে। আপনার অ্যাপ্লিকেশনটি আর ব্যবহার না করা গ্রাহকদের অ্যাকাউন্টগুলি সরাতে আপনার পর্যায়ক্রমে আপনার প্রক্রিয়া এবং ডেটা স্টোর পরিষ্কার করা উচিত। অব্যবহৃত Google বিজ্ঞাপন অ্যাকাউন্টগুলি পরিষ্কার করার সময়, নিম্নলিখিত নির্দেশিকাগুলি মনে রাখবেন:
- আপনার গ্রাহক তাদের অ্যাকাউন্ট পরিচালনা করার জন্য আপনার আবেদনকে যে অনুমোদন দিয়েছেন তা প্রত্যাহার করুন।
- গ্রাহকের Google Ads অ্যাকাউন্টে API কল করা বন্ধ করুন। এটি বিশেষ করে অফলাইন চাকরি যেমন ক্রোন জব এবং ডেটা পাইপলাইনের ক্ষেত্রে প্রযোজ্য যা ব্যবহারকারীর হস্তক্ষেপ ছাড়াই চালানোর জন্য ডিজাইন করা হয়েছে।
- যদি গ্রাহক তাদের অনুমোদন প্রত্যাহার করে নেন, তাহলে আপনার অ্যাপ্লিকেশনটি পরিস্থিতিটি সুন্দরভাবে পরিচালনা করবে এবং Google এর API সার্ভারগুলিতে অবৈধ API কল পাঠানো এড়াবে।
- যদি গ্রাহক তার Google Ads অ্যাকাউন্ট বাতিল করে থাকেন, তাহলে আপনার এটি সনাক্ত করা উচিত এবং Google এর API সার্ভারে অবৈধ API কল পাঠানো এড়িয়ে চলা উচিত।
- উপযুক্ত সময়ের পরে আপনার স্থানীয় ডাটাবেস থেকে গ্রাহকের Google বিজ্ঞাপন অ্যাকাউন্ট থেকে ডাউনলোড করা ডেটা মুছে ফেলুন।