পেশাদার পদ্ধতি ও সীমাবদ্ধতা

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_enabled true-এ সেট করা বা সেট না করা, কারণ এটি ডিফল্ট হিসেবে 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-এর থেকে কম হলে, API BatchJobError.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.bytesize
    

    Perl

    
    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 ফিল্ডে কোন সীমা লঙ্ঘন করা হয়েছে তা উল্লেখ করা থাকে।