ব্যাচ জবে লিস্টিং গ্রুপ ফিল্টার ব্যবহার করুন

যখন আপনি AdGroupCriterion.listing_group বা AssetGroupListingGroupFilter এর প্রেক্ষাপটে লিস্টিং গ্রুপ ফিল্টার নিয়ে কাজ করেন, তখন আপনার ইন্টিগ্রেশন ডিজাইন করার সময় নিম্নলিখিত বিষয়গুলো বিবেচনায় রাখুন।

ব্যাচ বিভাজন

যদি কোনো ব্যাচ জবে এমন কোনো অপারেশন থাকে যাতে অ্যাড গ্রুপ ক্রাইটেরিয়া বা অ্যাসেট গ্রুপ লিস্টিং গ্রুপ ফিল্টার অন্তর্ভুক্ত থাকে, তাহলে গুগল অ্যাডস এপিআই সার্ভারে গৃহীত হওয়ার পর ব্যাচ জবের অপারেশনগুলো একাধিক সাব-ব্যাচে বিভক্ত হয়ে যায়। ব্যাচ জবের সাধারণ অপারেশনের থেকে ভিন্নভাবে, লিস্টিং গ্রুপ ফিল্টার অপারেশনযুক্ত প্রতিটি সাব-ব্যাচকে অ্যাটমিকভাবে বিবেচনা করা হয়।

লিস্টিং গ্রুপ ফিল্টারযুক্ত ব্যাচ জবগুলোকে যেভাবে সাব-ব্যাচে বিভক্ত করা হয়, তা নিম্নলিখিত বিষয়গুলোর দ্বারা নির্ধারিত হয়:

  1. তালিকার প্রকার গ্রুপ ফিল্টার
  2. লিস্টিং গ্রুপ ফিল্টারটি যে AdGroup বা AssetGroup টার্গেট করছে
  3. কার্যক্রমের ক্রম

অপারেশনগুলো কীভাবে দলবদ্ধ করা হয় তা বিবেচনা করুন:

  • একই AssetGroup লক্ষ্য করে পরিচালিত সমস্ত ধারাবাহিক AssetGroupListingGroupFilterOperation অপারেশন ( create , update এবং remove ) একটি অ্যাটমিক সাব-ব্যাচে একত্রিত করা হয় (কোনো আংশিক ব্যর্থতার আচরণ নেই)।
  • একই AdGroup লক্ষ্য করে LISTING_GROUP ক্রাইটেরিয়ার ( AdGroupCriterion.listing_group ) জন্য পরপর সমস্ত AdGroupCriterionOperation অপারেশন ( create , update , এবং remove ) একটি অ্যাটমিক সাব-ব্যাচে একত্রিত করা হয় (কোনো আংশিক ব্যর্থতার আচরণ নেই)।
  • অন্যান্য সমস্ত ধারাবাহিক অপারেশনগুলিকে নন-অ্যাটমিক সাব-ব্যাচে একত্রিত করা হয় (আংশিক ব্যর্থতার আচরণ)।

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

ডায়াগ্রাম যা ব্যাচ অপারেশনগুলিকে উপ-ব্যাচে বিভক্ত করে দেখাচ্ছে

সীমাবদ্ধতা

ব্যাচ জবের প্রেক্ষাপটে লিস্টিং গ্রুপ ফিল্টার নিয়ে কাজ করার সময় নিম্নলিখিত সীমাবদ্ধতাগুলো প্রযোজ্য হয়:

  • একই AdGroup লক্ষ্য করে LISTING_GROUP ক্রাইটেরিয়ার ( AdGroupCriterion.listing_group ) জন্য AdGroupCriterionOperation এর ধারাবাহিক অপারেশনগুলোর ( create , update , এবং remove ) একটি একক অ্যাটমিক সাব-ব্যাচের দৈর্ঘ্য ২০,০০০ অপারেশনের বেশি হতে পারবে না। তবে, ১০,০০০ অপারেশনের বেশি না করার পরামর্শ দেওয়া হয়। যেহেতু প্রতিটি AddBatchJobOperationsRequest সর্বোচ্চ সীমা ১০,০০০ অপারেশন, তাই ১০,০০১ থেকে ২০,০০০ অপারেশনের একটি AdGroup সাব-ব্যাচ অবশ্যই কমপক্ষে দুটি ধারাবাহিক AddBatchJobOperations রিকোয়েস্টের মাধ্যমে আপলোড করতে হবে।
  • একই AssetGroup লক্ষ্য করে পরিচালিত ধারাবাহিক AssetGroupListingGroupFilterOperation অপারেশনগুলোর ( create , update এবং remove ) একটি একক অ্যাটমিক সাব-ব্যাচ ১০,০০০-এর বেশি অপারেশন করতে পারবে না।
  • এই অপারেশন সংখ্যার সীমাগুলোর যেকোনো একটি লঙ্ঘন করলে (অথবা একটি একক সাব-ব্যাচের জন্য সার্ভারের অভ্যন্তরীণ সিরিয়ালাইজড বাইট আকারের সীমা অতিক্রম করলে) সেই সাব-ব্যাচটিতে ব্যাচ জবটি বাতিল হয়ে যায়: এর আগে সম্পন্ন হওয়া যেকোনো সাব-ব্যাচ কমিট করা অবস্থায় থাকে, কিন্তু সমস্যা সৃষ্টিকারী সাব-ব্যাচ এবং এর পরবর্তী যেকোনো সাব-ব্যাচের সমস্ত অপারেশন InternalError.INTERNAL_ERROR সাথে ব্যর্থ হয়।

সমস্যা সমাধান

একটি ব্যাচ জবে লিস্টিং গ্রুপ ফিল্টার অপারেশনগুলো একটি একক ট্রানজ্যাকশন হিসেবে প্রসেস করা হয়, যার ফলে অল্প কিছু ত্রুটিপূর্ণ অপারেশনের কারণে অনেকগুলো অপারেশন ব্যর্থ হওয়ার পরিস্থিতি তৈরি হতে পারে। অধিকন্তু, BatchJob অপারেশনগুলো যেভাবে প্রসেস করা হয়, তার কারণে ব্যর্থতার মূল কারণটি পরবর্তী ব্যর্থতাগুলোর আগে বা পরে কোনো এক পর্যায়ে দেখা দিতে পারে।

উদাহরণস্বরূপ, ListBatchJobResults থেকে প্রাপ্ত কোনো প্রতিক্রিয়া প্রক্রিয়া করার সময়:

এই ত্রুটিগুলি নির্দেশ করে যে, একই অ্যাটমিক সাব-ব্যাচের অন্য একটি অপারেশন ব্যর্থ হওয়ায় ওই ইনডেক্সের অপারেশনটি রোলব্যাক করা হয়েছে। সমস্যার মূল কারণ শনাক্ত করতে, একই AdGroup বা AssetGroup ID শেয়ার করা অপারেশনগুলির জন্য প্রতিটি BatchJobResult এর status মেসেজগুলি—ট্রানজ্যাকশন ত্রুটির operation_index এর আগে ও পরে—পর্যালোচনা করুন।