দক্ষতার সাথে ডেটা পরিচালনা করুন

অনেক গুগল অ্যাডস অ্যাপ্লিকেশনের একটি মূল কাজ হলো ডেটা বিশ্লেষণ, গ্রাহকের জিজ্ঞাসা এবং নীতিমালা যাচাইয়ের মতো ব্যবহারের জন্য অ্যাকাউন্টের ডেটা সংগ্রহ করা। ডেটা সংগ্রহের সময়, আপনার ব্যবহার অপ্টিমাইজ করা উচিত যাতে গুগল সার্ভারগুলো ওভারলোড না হয়, অন্যথায় রেট লিমিটেডের ঝুঁকি থাকে। আরও বিস্তারিত জানতে, রেট-লিমিটিং এবং একটি হালনাগাদ যোগাযোগের ইমেল ঠিকানা বজায় রাখার নির্দেশিকাগুলো দেখুন।

রিপোর্টের জন্য গুগলের রিসোর্স ব্যবহারের নীতি বুঝুন।

এর সার্ভারগুলোর স্থিতিশীলতা নিশ্চিত করতে, গুগল অ্যাডস এপিআই সেইসব GoogleAdsService.Search এবং GoogleAdsService.SearchStream কোয়েরি প্যাটার্নগুলোকে থ্রটল করে যেগুলো অতিরিক্ত পরিমাণে এপিআই রিসোর্স ব্যবহার করে। যদি কোনো নির্দিষ্ট কোয়েরি প্যাটার্ন থ্রটল করা হয়, তবে অন্যান্য সার্ভিস, মেথড এবং কোয়েরি প্যাটার্নগুলো অপরিবর্তিতভাবে কাজ করতে থাকবে। থ্রটল করা রিকোয়েস্টগুলোর জন্য নিম্নলিখিত এররগুলো দেখানো হয়:

ত্রুটি কোড
উচ্চ রিসোর্স ব্যবহারের সময়কালের উপর নির্ভর করে QuotaError.EXCESSIVE_SHORT_TERM_QUERY_RESOURCE_CONSUMPTION অথবা QuotaError.EXCESSIVE_LONG_TERM_QUERY_RESOURCE_CONSUMPTION

আপনি যদি এই ত্রুটিগুলির সম্মুখীন হন, তাহলে QuotaError.EXCESSIVE_SHORT_TERM_QUERY_RESOURCE_CONSUMPTION এর কারণে ব্যর্থ হওয়া অনুরোধগুলি পুনরায় চেষ্টা করার আগে ৫ মিনিট অপেক্ষা করুন এবং QuotaError.EXCESSIVE_LONG_TERM_QUERY_RESOURCE_CONSUMPTION এর কারণে ব্যর্থ হওয়া অনুরোধগুলির জন্য ৩০ মিনিট অপেক্ষা করুন।

আপনার ব্যয়বহুল রিপোর্টগুলো শনাক্ত ও নিরীক্ষণে সহায়তা করার জন্য, আমরা প্রতিটি রিপোর্টের জন্য একটি ব্যয় পরিমাপকও প্রদান করব।

পদ্ধতি ব্যয় ক্ষেত্র
GoogleAdsService.Search SearchGoogleAdsResponse.query_resource_consumption
GoogleAdsService.SearchStream SearchGoogleAdsStreamResponse.query_resource_consumption

এই ফিল্ডগুলো থেকে প্রাপ্ত খরচের মেট্রিক বিভিন্ন বিষয়ের উপর নির্ভর করে, যেমন—

  • আপনার অ্যাকাউন্টগুলির আকার
  • আপনার রিপোর্টে আপনি যে ভিউ এবং কলামগুলি নিয়ে আসেন
  • গুগল অ্যাডস এপিআই সার্ভারগুলোর উপর চাপ।

ব্যয়বহুল কোয়েরিগুলো ট্র্যাক করতে আপনাকে সাহায্য করার জন্য, আমরা আমাদের সার্ভারগুলোতে দেখা বিভিন্ন কোয়েরি প্যাটার্নের রিসোর্স ব্যবহারের প্রাথমিক সমষ্টিগত পরিসংখ্যান প্রকাশ করছি। আপনার কোয়েরিগুলোকে আরও নিখুঁত করতে সাহায্য করার জন্য আমরা পর্যায়ক্রমে হালনাগাদ করা সংখ্যা প্রকাশ করব।

সময়সীমা গড় (পৃষ্ঠা ৫০)। পি৭০ (মাঝারি উচ্চ) পি৯৫ (খুব উচ্চ)
স্বল্পমেয়াদী (৫ মিনিট) ৬০০০ ৩০০০০ ১৮০০০০০
দীর্ঘমেয়াদী (২৪ ঘন্টা)। ১৬০০০ ৯০০০০ ৮৪,০০,০০০

উদাহরণস্বরূপ, ধরে নিন আপনি নিম্নলিখিত একটি কোয়েরি প্যাটার্ন চালাচ্ছেন, যা প্রতি রিপোর্টে ৬০০ ইউনিট রিসোর্স ব্যবহার করে।

SELECT campaign.id, campaign.name, metrics.cost_micros FROM campaign WHERE
    segments.date = "YYYY-MM-DD"

আপনি segments.date ফিল্টারে বিভিন্ন মান প্রতিস্থাপন করে কোয়েরিটি পরিবর্তন করার মাধ্যমে একাধিক গ্রাহক অ্যাকাউন্টের জন্য বিভিন্ন পৃথক তারিখে এই কোয়েরিটি চালাতে পারেন। নিম্নলিখিত সারণিটি দেখায় যে, একটি নির্দিষ্ট সময়সীমার মধ্যে আপনি কতগুলি রিপোর্ট চালাতে পারবেন, যাতে আপনার রিসোর্স ব্যবহার বিভিন্ন রিসোর্স ব্যবহারের বিভাগের সাথে সামঞ্জস্যপূর্ণ হয়।

সময়সীমা গড় মাঝারি উচ্চ খুব উঁচু
স্বল্পমেয়াদী (৫ মিনিট) ১০ ৫০ ৩০০০
দীর্ঘমেয়াদী (২৪ ঘন্টা)। ২৬ ১৫০ ১৪০০০

৫ মিনিটে এই কোয়েরি প্যাটার্নটি ১০ বার চালালে তা গড় ব্যবহার হিসেবে গণ্য হবে, অপরদিকে ৫ মিনিটে ৩০০০টি রিপোর্ট চালালে তা অত্যন্ত বেশি ব্যবহার হিসেবে গণ্য হবে।

আপনার রিপোর্টগুলোর রিসোর্স ব্যবহার অপ্টিমাইজ করার জন্য বেশ কিছু কৌশল রয়েছে। এই গাইডের বাকি অংশে এই কৌশলগুলোর কয়েকটি আলোচনা করা হয়েছে।

আপনার ডেটা ক্যাশ করুন

প্রতিবার ডেটার প্রয়োজন হলে সার্ভারকে কল করার পরিবর্তে, এপিআই সার্ভার থেকে আনা এনটিটির বিবরণ একটি স্থানীয় ডেটাবেসে ক্যাশ করে রাখা উচিত, বিশেষ করে সেইসব এনটিটির ক্ষেত্রে যেগুলো ঘন ঘন অ্যাক্সেস করা হয় বা যেগুলো খুব কমই পরিবর্তিত হয়। শেষবার ফলাফল সিঙ্ক করার পর কোন অবজেক্টগুলো পরিবর্তিত হয়েছে তা শনাক্ত করতে, যেখানে সম্ভব সেখানে change-event এবং change-status ব্যবহার করুন।

রিপোর্ট চালানোর পুনরাবৃত্তি অপ্টিমাইজ করুন

গুগল অ্যাডস ডেটার সতেজতা এবং ডেটা কত ঘন ঘন আপডেট করা হয়, সে বিষয়ে নির্দেশিকা প্রকাশ করেছে । কত ঘন ঘন রিপোর্ট সংগ্রহ করবেন, তা নির্ধারণ করতে আপনার এই নির্দেশিকা ব্যবহার করা উচিত।

যদি আপনাকে নিয়মিতভাবে অ্যাকাউন্ট আপডেট করতে হয়, তাহলে আমরা এই ধরনের অ্যাকাউন্টের সংখ্যা একটি ছোট সেটে সীমাবদ্ধ রাখার পরামর্শ দিই, যেমন—শুধুমাত্র সেরা কুড়িটি গুগল অ্যাডস অ্যাকাউন্ট। বাকিগুলো কম বিরতিতে আপডেট করা যেতে পারে, যেমন—দিনে একবার বা দুইবার।

আপনার রিপোর্টের আকার অপ্টিমাইজ করুন।

আপনার অ্যাপ্লিকেশনটির উচিত প্রচুর সংখ্যক ছোট ছোট রিপোর্ট চালানোর পরিবর্তে একসাথে অনেক ডেটা সংগ্রহ করা। এই সিদ্ধান্ত নেওয়ার ক্ষেত্রে অ্যাকাউন্টের সীমা একটি গুরুত্বপূর্ণ বিষয়।

উদাহরণস্বরূপ, নিম্নলিখিত কোডটি বিবেচনা করুন যা নির্দিষ্ট বিজ্ঞাপন গোষ্ঠীগুলির পরিসংখ্যান সংগ্রহ করে এবং একটি পরিসংখ্যান ডেটাবেস টেবিল আপডেট করে:

  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);
  }

এই কোডটি একটি ছোট টেস্ট অ্যাকাউন্টে ভালোভাবে কাজ করে। তবে, গুগল অ্যাডস প্রতি ক্যাম্পেইনে ২০,০০০ পর্যন্ত অ্যাড গ্রুপ এবং প্রতি অ্যাকাউন্টে ১০,০০০ পর্যন্ত ক্যাম্পেইন সমর্থন করে। তাই, এই কোডটি যদি একটি বড় গুগল অ্যাডস অ্যাকাউন্টে চালানো হয়, তবে এটি গুগল অ্যাডস এপিআই সার্ভারগুলোকে ওভারলোড করতে পারে, যার ফলে রেট লিমিটিং এবং থ্রটলিং হতে পারে।

আরও ভালো একটি উপায় হলো একটিমাত্র রিপোর্ট চালানো এবং সেটিকে স্থানীয়ভাবে প্রসেস করা। ইন-মেমরি ম্যাপ ব্যবহার করে এমনই একটি পদ্ধতি দেখানো হয়েছে।

  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);
  }

কম সংখ্যক রিপোর্ট চালানো হওয়ায় গুগল অ্যাডস এপিআই সার্ভারগুলোর ওপর চাপ কমে যায়।

যদি দেখেন যে রিপোর্টটি মেমরিতে রাখার জন্য অনেক বড়, তাহলে আপনি এইভাবে একটি 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 রিপোর্ট চালাতে পারেন।

কিছু ক্ষেত্রে, উপযুক্ত ফিল্টার প্রয়োগ করে আপনি ডাউনলোড করা সারির সংখ্যা কমাতে পারেন।

অব্যবহৃত অ্যাকাউন্টগুলি পরিষ্কার করুন

আপনার অ্যাপ্লিকেশন যদি তৃতীয় পক্ষের গ্রাহকদের অ্যাকাউন্ট পরিচালনা করে, তাহলে গ্রাহক হারানোর বিষয়টি মাথায় রেখে আপনাকে অ্যাপ্লিকেশনটি তৈরি করতে হবে। যেসব গ্রাহক আর আপনার অ্যাপ্লিকেশন ব্যবহার করেন না, তাদের অ্যাকাউন্ট মুছে ফেলার জন্য আপনার প্রসেস এবং ডেটা স্টোরগুলো পর্যায়ক্রমে পরিষ্কার করা উচিত। অব্যবহৃত গুগল অ্যাডস অ্যাকাউন্টগুলো পরিষ্কার করার সময়, নিম্নলিখিত নির্দেশিকাগুলো মনে রাখবেন:

  • আপনার গ্রাহক তাদের অ্যাকাউন্ট পরিচালনা করার জন্য আপনার অ্যাপ্লিকেশনকে যে অনুমোদন দিয়েছেন, তা প্রত্যাহার করুন।
  • গ্রাহকের গুগল অ্যাডস অ্যাকাউন্টে এপিআই (API) কল করা বন্ধ করুন। এটি বিশেষ করে অফলাইন কাজ, যেমন ক্রন জব এবং ডেটা পাইপলাইনের ক্ষেত্রে প্রযোজ্য, যেগুলো ব্যবহারকারীর হস্তক্ষেপ ছাড়াই চলার জন্য ডিজাইন করা হয়েছে।
  • যদি গ্রাহক তার অনুমোদন প্রত্যাহার করেন, তাহলে আপনার অ্যাপ্লিকেশনটির উচিত পরিস্থিতিটি সুষ্ঠুভাবে সামাল দেওয়া এবং গুগলের এপিআই সার্ভারগুলিতে অবৈধ এপিআই কল পাঠানো থেকে বিরত থাকা।
  • যদি গ্রাহক তার গুগল অ্যাডস অ্যাকাউন্ট বাতিল করে দেন, তাহলে আপনার তা শনাক্ত করা উচিত এবং গুগলের এপিআই সার্ভারগুলিতে অবৈধ এপিআই কল পাঠানো থেকে বিরত থাকা উচিত।
  • একটি নির্দিষ্ট সময় পর গ্রাহকের গুগল অ্যাডস অ্যাকাউন্টগুলো থেকে ডাউনলোড করা ডেটা আপনার স্থানীয় ডেটাবেস থেকে মুছে ফেলুন।