BatchJobService ব্যবহার করার সময় এইসব নির্দেশিকা বিবেচনা করুন।
থ্রুপুট উন্নত করুন
অনেক ছোট ছোট কাজের চেয়ে কম সংখ্যক বড় কাজকে বেশি পছন্দ করা হয়।
আপলোড করা অপারেশনগুলিকে অপারেশনের ধরন অনুসারে সাজান (পরস্পর নির্ভরশীল অপারেশনগুলি ছাড়া যেগুলিকে অবশ্যই অ্যাটমিক সাব-ব্যাচে পরপর গ্রুপ করতে হবে)। যেমন, আপনার জবে স্ট্যান্ডার্ড ক্যাম্পেন, বিজ্ঞাপন গ্রুপ ও বিজ্ঞাপন গ্রুপের মাপকাঠি যোগ করার অপারেশন থাকলে, আপলোডে অপারেশনগুলি এমনভাবে সাজান যাতে সব ক্যাম্পেন অপারেশন প্রথমে থাকে, তারপরে সব বিজ্ঞাপন গ্রুপ অপারেশন এবং শেষে সব বিজ্ঞাপন গ্রুপের মাপকাঠি অপারেশন থাকে।
একই ধরনের অপারেশনের মধ্যে, পেরেন্ট রিসোর্স অনুযায়ী গ্রুপ করলে পারফর্ম্যান্স আরও ভালো হতে পারে। যেমন, আপনার কাছে
AdGroupCriterionOperationঅবজেক্টের সিরিজ থাকলে, বিভিন্ন বিজ্ঞাপন গ্রুপের মধ্যে বিজ্ঞাপন গ্রুপের মাপকাঠিকে প্রভাবিত করে এমন অপারেশনগুলিকে মিশিয়ে দেওয়ার পরিবর্তে বিজ্ঞাপন গ্রুপ অনুযায়ী অপারেশনগুলিকে গ্রুপ করা আরও দক্ষ।
ব্যাচ স্প্লিটিংয়ে অ্যাটমিসিটি
Google Ads API জমা দেওয়া ব্যাচ জবের অপারেশনগুলিকে প্রসেস করার জন্য ছোট ছোট সাব-ব্যাচে ভাগ করে। স্ট্যান্ডার্ড সাব-ব্যাচ আংশিক ব্যর্থতা সহ এক্সিকিউট হলেও, নির্দিষ্ট কিছু পরস্পর নির্ভরশীল অপারেশনের জন্য সাব-ব্যাচগুলি একটি একক ট্রানজ্যাকশন হিসেবে অ্যাটমিক্যালি প্রসেস করা হয়:
LISTING_GROUPশর্তের (AdGroupCriterion.listing_group) জন্য পরপরAdGroupCriterionOperationঅপারেশন (create,updateএবংremove) একইAdGroupটার্গেট করছে (গ্রুপের কোনও অপারেশন ব্যর্থ হলেCriterionError.LISTING_GROUP_ERROR_IN_ANOTHER_OPERATIONদিয়ে ব্যর্থ হয়)।AssetGroupListingGroupFilterOperationপরপর অপারেশন (create,updateএবংremove) একইAssetGroupটার্গেট করে (গ্রুপের কোনও অপারেশন ব্যর্থ হলেBatchJobError.ASSET_GROUP_LISTING_GROUP_FILTER_TRANSACTION_FAILUREব্যর্থ হয়)।- একটি
AssetGroupOperation(create) অবিলম্বে অনুসরণ করা হয় সর্বাধিক ৯৯৯টিAssetGroupAssetOperation(create) একইAssetGroup(ব্যর্থ হয়BatchJobError.ASSET_GROUP_AND_ASSET_GROUP_ASSET_TRANSACTION_FAILUREযদি গ্রুপের কোনও অপারেশন ব্যর্থ হয়) টার্গেট করে অপারেশন। প্রতিটিAssetGroupOperation(updateবাremove) তার নিজস্ব স্ট্যান্ডঅ্যালোন সিঙ্গেল-অপারেশন সাব-ব্যাচে এক্সিকিউট হয়। - ব্র্যান্ড গাইডলাইন চালু থাকা (
brand_guidelines_enabledtrue-এ সেট করা বা সেট না করা, কারণ এটি ডিফল্ট হিসেবেtrue-এ সেট করা থাকে, যদি না স্পষ্টভাবেfalse-এ সেট করা হয় বা ভ্রমণ সংক্রান্ত লক্ষ্যের জন্য পারফর্ম্যান্স ম্যাক্স ক্যাম্পেন তৈরি করা হয়) পারফর্ম্যান্স ম্যাক্সCampaignOperation(create) ক্যাম্পেনের ঠিক পরেই একইCampaign-কে টার্গেট করে সর্বাধিক ৯৯৯টিCampaignAssetOperation(create) অপারেশন করা হয় (গ্রুপের কোনও অপারেশন ব্যর্থ হলেBatchJobError.CAMPAIGN_AND_CAMPAIGN_ASSET_TRANSACTION_FAILUREএরর সহ ব্যর্থ হয়)। রিটেল পারফর্ম্যান্স ম্যাক্স ক্যাম্পেন (Merchant Center ফিড সহ) একই অ্যাটমিক সাব-ব্যাচে ব্র্যান্ডCampaignAssetরিসোর্স লিঙ্ক না করেই তৈরি করা যেতে পারে।
AssetGroup এবং পারফর্ম্যান্স ম্যাক্স
Campaign ক্রিয়েশন সাব-ব্যাচ (প্রতি সাব-ব্যাচে মোট ১,০০০টি অপারেশন পর্যন্ত;
৯৯৯-এর বেশি যেকোনও চাইল্ড create অপারেশন পরবর্তী নন-অ্যাটমিক সাব-ব্যাচে
স্পিল হয়):
- পেরেন্ট
createঅপারেশন (resource_name,AssetGroupবাCampaign-এ) এবং এর পরপর চাইল্ডcreateঅপারেশন (asset_group,AssetGroupAsset-এ বাcampaign,CampaignAsset-এ) অবশ্যই একই নেগেটিভ টেম্পোরারি আইডি নির্দিষ্ট করতে হবে। - নতুন
Assetরিসোর্সের জন্য যেকোনও পূর্বশর্তAssetOperation(create) অপারেশন পেরেন্টAssetGroupOperationবাCampaignOperation(create)-এর আগে রাখুন, পেরেন্টcreateএবং তার চাইল্ড লিঙ্কcreateঅপারেশনের মধ্যে কখনই নয় (যা অবিলম্বে অ্যাটমিক সাব-ব্যাচ বন্ধ করে দেবে এবং পেরেন্ট রিসোর্স তৈরিকে তার লিঙ্ক করা অ্যাসেট থেকে আলাদা করে দেবে)।
কোনও অ্যাটমিক সাব-ব্যাচ ব্যর্থ হলে, যে অপারেশনের জন্য সমস্যা হয়েছে সেটির
BatchJobResult.status-এ অন্তর্নিহিত
যাচাইকরণ সংক্রান্ত ত্রুটি থাকে, যেখানে সেই সাব-ব্যাচের বাকি অপারেশনগুলি
সেই সাব-ব্যাচের জন্য সংশ্লিষ্ট ট্রানজ্যাকশন সংক্রান্ত ত্রুটির সাথে রোল ব্যাক করা হয়। মূল কারণ সংক্রান্ত সমস্যা শনাক্ত করতে
একই AdGroup, AssetGroup বা Campaign আইডি
শেয়ার করা পাশাপাশি থাকা BatchJobResult এন্ট্রি
ভালভাবে দেখুন।
এইসব গ্রুপের কোনওটিতে সম্পর্কিত অপারেশন পরপর যোগ করা না হলে, Google Ads API সেগুলিকে আলাদা সাব-ব্যাচে ভাগ করে দেয়, যার ফলে পরিবর্তনটি ন্যূনতম অ্যাসেট সংক্রান্ত প্রয়োজনীয়তা পূরণ করতে পারে না অথবা লিস্টিং গ্রুপ ট্রি অসম্পূর্ণ থেকে যায়। বিস্তারিত জানতে ব্যাচ জবে লিস্টিং গ্রুপের ফিল্টার ব্যবহার করুন এবং পারফর্ম্যান্স ম্যাক্স ব্যাচ প্রসেসিং দেখুন।
লজিক্যাল গ্রুপিং
প্রোডাক্ট টার্গেটিং হায়ারার্কি পরিবর্তন করার সময়
(পারফর্ম্যান্স ম্যাক্স ক্যাম্পেনে AssetGroupListingGroupFilterOperation বা
শপিং ক্যাম্পেনে AdGroupCriterionOperation) অথবা নতুন AssetGroup বা
পারফর্ম্যান্স ম্যাক্স Campaign তৈরি করার সময়, একই পেরেন্ট রিসোর্স (AssetGroup, AdGroup বা
Campaign) টার্গেট করে এমন সব অপারেশন পরপর গ্রুপ করুন। এটি ব্যাকএন্ড লক কনটেনশন কমায় এবং
পরস্পরের উপর নির্ভরশীল ট্রি একসাথে রাখে।
ডেটা কনসিস্টেন্সি
লিস্টিং গ্রুপের ফিল্টার ট্রি এবং পারফর্ম্যান্স ম্যাক্স অ্যাসেটের প্রয়োজনীয়তা প্রতিটি অ্যাটোমিক সাব-ব্যাচ ট্রানজ্যাকশনের শেষে যাচাই করা হয়, তাই কোনও কাজের মধ্যে অবিচ্ছিন্ন রেঞ্জ জুড়ে বা সমবর্তী কাজ জুড়ে একই পেরেন্ট রিসোর্সের আপডেট বিভক্ত করা এড়িয়ে চলুন।
কনকারেন্সি সংক্রান্ত সমস্যা এড়ানো
একই অ্যাকাউন্টের জন্য একাধিক সমবর্তী কাজ জমা দেওয়ার সময়, বড় কাজের আকার বজায় রেখে একই সময়ে একই অবজেক্টে কাজ করার সম্ভাবনা হ্রাস করুন।
RUNNINGস্ট্যাটাস সহ অনেক অসম্পূর্ণ কাজ যা একই অবজেক্টের সেট পরিবর্তন করার চেষ্টা করে, তা ডেডলকের মতো পরিস্থিতি তৈরি করতে পারে, যার ফলে কাজ অত্যন্ত ধীর গতিতে চলতে পারে এবং এমনকি কাজ ব্যর্থও হতে পারে।একই কাজের মধ্যে একই অবজেক্টকে মিউটেট করে এমন একাধিক অপারেশন জমা দেবেন না, কারণ এর ফলে ফলাফল অপ্রত্যাশিত হতে পারে।
ফলাফল সবচেয়ে ভালোভাবে ফিরিয়ে আনা
জবের স্ট্যাটাস খুব ঘন ঘন পোল করবেন না, তা করলে রেট লিমিট সংক্রান্ত সমস্যার ঝুঁকি থাকে।
ListBatchJobResultsকল করার সময়page_sizeসেট না করে (অথবা সর্বাধিক1000-এ সেট করুন) ছেড়ে দিন যাতে পেজিনেশন রাউন্ড ট্রিপ কমানো যায় এবংresponse_content_type-কেMUTABLE_RESOURCE-এ তখনই সেট করুন যদি আপনার অ্যাপ্লিকেশনresource_name-এর বাইরে রিটার্ন করা রিসোর্স ফিল্ড চেক করে।আপলোড করার ক্রম অনুযায়ী ফলাফল দেখানো হয়।
ব্যবহার সংক্রান্ত অতিরিক্ত নির্দেশিকা
আপনি একটি ব্যাচ জব বাতিল করার আগে কতক্ষণ চালানোর অনুমতি দেওয়া হবে তার জন্য একটি ঊর্ধ্ব সীমা সেট করতে পারেন। নতুন ব্যাচ জব তৈরি করার সময়,
metadata.execution_limit_secondsফিল্ডে আপনার পছন্দসই সময়সীমা সেকেন্ডে সেট করুন।metadata.execution_limit_secondsসেট করা না থাকলে, ডিফল্ট সময়সীমা বলে কিছু থাকে না।যদিও প্রোটোকল সীমা হল অনুরোধ প্রতি ১০,০০০টি অপারেশন, আমরা সাজেস্ট করি
AddBatchJobOperationsRequestপ্রতি ১,০০০টির বেশি অপারেশন যোগ না করতে এবং একই জবে বাকি অপারেশন আপলোড করতেsequence_tokenব্যবহার করতে। অপারেশনের সাইজের উপর নির্ভর করে, একটিAddBatchJobOperationsRequest-এ অনেক বেশি অপারেশন পাঠালেBatchJobError.REQUEST_TOO_LARGEসমস্যা হতে পারে। আপনি অপারেশনের সংখ্যা কমিয়ে এবংAddBatchJobOperationsRequestআবার চেষ্টা করে এই সমস্যার সমাধান করতে পারেন।
সীমাবদ্ধতা
প্রতিটি
BatchJobসর্বাধিক এক মিলিয়ন অপারেশন সাপোর্ট করে।AddBatchJobOperationsকল করার সময় এই সীমা পেরিয়ে গেলেResourceCountLimitExceededError.RESOURCE_LIMITসমস্যা দেখায় (ErrorDetails.resource_count_details-এResourceLimitType.BATCH_JOB_OPERATIONS_PER_JOBসহ)।প্রতিটি অ্যাকাউন্টে একই সময়ে সর্বাধিক ১০০টি অ্যাক্টিভ বা বাকি থাকা কাজ থাকতে পারে।
MutateBatchJob-এর সাথে ব্যাচ জব তৈরি করার সময় এই সীমা অতিক্রম করলেResourceCountLimitExceededError.RESOURCE_LIMITসমস্যা (ErrorDetails.resource_count_details-এResourceLimitType.BATCH_JOBS_PER_CUSTOMERসহ) দেখায়।৭ দিনের বেশি পুরনো বাকি থাকা কাজ অটোমেটিক সরিয়ে দেওয়া হয়।
প্রতিটি
AddBatchJobOperationsRequest-এ অনুরোধ পিছু ১০,০০০টি মিউটেট অপারেশনের হার্ড লিমিট আছে। একটি অনুরোধে ১০,০০০-এর বেশি অপারেশন করলেBatchJobError.REQUEST_TOO_LARGEসমস্যা দেখা দেয়।ListBatchJobResultsRequest-এpage_sizeফিল্ডের জন্য:page_sizeসেট করা না থাকলে বা0হলে, এটি ডিফল্ট হিসেবে সর্বাধিক1000হয়।page_size,1000-এর থেকে বেশি বা0-এর থেকে কম হলে, APIBatchJobError.INVALID_PAGE_SIZEসমস্যা দেখায়।
প্রতিটি
AddBatchJobOperationsRequest-এর সর্বাধিক সাইজ ৪১,৯৩৭,৯২০ বাইট। আপনি এই সীমা অতিক্রম করলে, একটিBatchJobError.REQUEST_TOO_LARGEসমস্যা (বা ট্রান্সপোর্ট লেয়ারে বাতিল করা হলেINTERNAL_ERROR) দেখতে পাবেন। আপনি অনুরোধ জমা দেওয়ার আগে সেটির সিরিয়ালাইজ করা সাইজ নির্ধারণ করতে এবং সেটি খুব বড় হলে উপযুক্ত অ্যাকশন নিতে পারবেন:Java
static final int MAX_REQUEST_BYTES = 41_937_920; // ... (code to get the AddBatchJobOperationsRequest object) int sizeInBytes = request.getSerializedSize();C#
const int MAX_REQUEST_BYTES = 41_937_920; // ... (code to get the AddBatchJobOperationsRequest object) int sizeInBytes = request.CalculateSize();PHP
const MAX_REQUEST_BYTES = 41937920; // ... (code to get the AddBatchJobOperationsRequest object) $size_in_bytes = $request->byteSize();Python
MAX_REQUEST_BYTES = 41_937_920 # ... (code to get the AddBatchJobOperationsRequest object) size_in_bytes = type(request).pb(request).ByteSize()Ruby
MAX_REQUEST_BYTES = 41_937_920 # ... (code to get the AddBatchJobOperationsRequest object) size_in_bytes = request.to_proto.bytesizePerl
use JSON::XS; use constant MAX_REQUEST_BYTES => 41937920; # ... (code to get the AddBatchJobOperationsRequest object) # The Perl client library uses REST/JSON; UTF-8 JSON byte length provides a # conservative upper-bound estimate of the serialized request size. my $json_encoder = JSON::XS->new->utf8->convert_blessed; my $size_in_bytes = length($json_encoder->encode($request));
একক মিউটেট অপারেশন সাইজ
সামগ্রিক অনুরোধের সাইজ ৪১,৯৩৭,৯২০ বাইট পর্যন্ত হতে পারে, তবে ব্যাচের মধ্যে
একটি MutateOperation-এর সিরিয়ালাইজ করা সাইজ
১০,৪৮৪,৫০৪ বাইটের (১০ MiB থেকে ১,২৫৬ বাইট কম) বেশি হতে পারবে না। এই সীমা অতিক্রম করলে,
BatchJobError.REQUEST_TOO_LARGE সংক্রান্ত সমস্যা দেখা যায়। মনে রাখবেন,
BatchJobError.REQUEST_TOO_LARGE-এর রেফারেন্স ডকুমেন্টেশনে
১০,৪৮৪,৫০৪-বাইট থ্রেশহোল্ডের উল্লেখ থাকলেও, তিনটি অনুরোধের থ্রেশহোল্ডের (মোট ৪১,৯৩৭,৯২০ অনুরোধ বাইট,
১০,৪৮৪,৫০৪ সিঙ্গল-অপারেশন বাইট বা কল প্রতি ১০,০০০ অপারেশন) যেকোনও একটি অতিক্রম করলে,
AddBatchJobOperations একই ত্রুটি কোড রিটার্ন করে,
যার সাথে ত্রুটির message ফিল্ডে কোন সীমা লঙ্ঘন করা হয়েছে তা উল্লেখ করা থাকে।