সর্বোত্তম অনুশীলন এবং সীমাবদ্ধতা

BatchJobService ব্যবহার করার সময় এই নির্দেশিকাগুলো বিবেচনা করুন।

থ্রুপুট উন্নত করুন

  • অনেক ছোট ছোট কাজের চেয়ে কম সংখ্যক বড় কাজ বেশি পছন্দনীয়।

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

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

ব্যাচ স্প্লিটিং-এ পারমাণবিকতা

Google Ads API জমা দেওয়া একটি ব্যাচ জবের অপারেশনগুলোকে প্রসেসিংয়ের জন্য ছোট ছোট সাব-ব্যাচে ভাগ করতে পারে। যদি আপনি একটি ব্যাচ জবের মধ্যে সম্পর্কিত অপারেশনগুলোকে, যেমন একটি AssetGroup এবং একটি AdGroup মধ্যে লিস্টিং গ্রুপের পরিবর্তন, ধারাবাহিকভাবে গ্রুপ না করেন, তাহলে Google Ads API এই অপারেশনগুলোকে বিভিন্ন সাব-ব্যাচে ভাগ করে দিতে পারে। এই বিভাজনের ফলে হয় পুরো পরিবর্তনটি ব্যর্থ হতে পারে, অথবা অ্যাকাউন্টটি একটি অসামঞ্জস্যপূর্ণ অবস্থায় থেকে যেতে পারে।

যৌক্তিক দলবদ্ধকরণ

AssetGroupListingGroupFilterOperation একটি AssetGroup মধ্যেকার লিস্টিং গ্রুপগুলো পরিচালনা করে, যা Performance Max ক্যাম্পেইনগুলোতে সচরাচর ব্যবহৃত হয়। AdGroupCriterionOperation একটি AdGroup মধ্যেকার লিস্টিং গ্রুপগুলো পরিচালনা করে, যা সাধারণ Shopping ক্যাম্পেইনগুলোতে সচরাচর ব্যবহৃত হয়। উভয়ই প্রোডাক্ট টার্গেটিং নির্ধারণ করতে ব্যবহৃত হয়। আপনি যদি এমন কোনো পরিবর্তন করেন যা উভয় ক্ষেত্রেই প্রোডাক্ট টার্গেটিং-এর স্তরবিন্যাসকে প্রভাবিত করে, তবে আপনার ব্যাচ জবে এই অপারেশনগুলোকে পরপর গ্রুপ করুন, যাতে সেগুলো একসাথে প্রয়োগ করা নিশ্চিত হয়।

ডেটার সামঞ্জস্যতা

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

যুগপৎ সমস্যা এড়িয়ে চলুন

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

  • একই জবে একই অবজেক্টকে পরিবর্তনকারী একাধিক অপারেশন জমা দেবেন না, কারণ এর ফলাফল অপ্রত্যাশিত হতে পারে।

সর্বোত্তমভাবে ফলাফল পুনরুদ্ধার করুন

  • কাজের অবস্থা খুব ঘন ঘন যাচাই করবেন না, নইলে রেট লিমিট এরর হওয়ার ঝুঁকি থাকবে।

  • প্রতি পৃষ্ঠায় ১,০০০টির বেশি ফলাফল প্রদর্শন করবেন না। লোড বা অন্যান্য কারণবশত সার্ভার এর চেয়ে কম ফলাফল দেখাতে পারে।

  • ফলাফলের ক্রম আপলোডের ক্রমের মতোই হবে।

অতিরিক্ত ব্যবহার নির্দেশিকা

  • একটি ব্যাচ জব বাতিল হওয়ার আগে কতক্ষণ চলতে পারবে, তার জন্য আপনি একটি সর্বোচ্চ সীমা নির্ধারণ করতে পারেন। নতুন ব্যাচ জব তৈরি করার সময়, metadata.execution_limit_seconds ফিল্ডটিতে আপনার পছন্দের সময়সীমা সেকেন্ডে সেট করুন। যদি metadata.execution_limit_seconds সেট করা না থাকে, তবে কোনো ডিফল্ট সময়সীমা থাকে না।

  • প্রতিটি AddBatchJobOperationsRequest এ ১,০০০টির বেশি অপারেশন যোগ না করার এবং বাকি অপারেশনগুলো একই জবে আপলোড করার জন্য sequence_token ব্যবহার করার পরামর্শ দেওয়া হচ্ছে। অপারেশনগুলোর বিষয়বস্তুর ওপর নির্ভর করে, একটি AddBatchJobOperationsRequest এ অতিরিক্ত অপারেশন থাকলে REQUEST_TOO_LARGE ত্রুটি দেখা দিতে পারে। আপনি অপারেশনের সংখ্যা কমিয়ে এবং AddBatchJobOperationsRequest টি পুনরায় চেষ্টা করে এই ত্রুটিটি সমাধান করতে পারেন।

সীমাবদ্ধতা

  • প্রতিটি BatchJob দশ লক্ষ পর্যন্ত অপারেশন সমর্থন করে।

  • প্রতিটি অ্যাকাউন্টে একই সময়ে সর্বোচ্চ ১০০টি সক্রিয় বা অপেক্ষাধীন কাজ থাকতে পারে।

  • ৭ দিনের বেশি পুরোনো অমীমাংসিত কাজগুলো স্বয়ংক্রিয়ভাবে মুছে ফেলা হয়।

  • v22 সংস্করণ থেকে, প্রতিটি AddBatchJobOperations অনুরোধে ১০,০০০টি মিউটেট অপারেশনের একটি সীমা নির্ধারণ করা হয়েছে।

  • v22 অনুযায়ী, ListBatchJobResultsRequest এর page_size ফিল্ডের জন্য:

    • যদি page_size সেট করা না থাকে বা এর মান ০ হয়, তবে এটি ডিফল্টভাবে সর্বোচ্চ ১,০০০ মানে সেট হয়ে যায়।
    • যদি page_size ১,০০০-এর বেশি হয়, অথবা ০-এর কম হয়, তাহলে API একটি INVALID_PAGE_SIZE ত্রুটি ফেরত দেয়।
  • v23 সংস্করণ থেকে, প্রতিটি AddBatchJobOperationsRequest এর সর্বোচ্চ আকার ৪১,৯৩৭,৯২০ বাইট। এই সীমা অতিক্রম করলে আপনি একটি INTERNAL_ERROR পাবেন। অনুরোধটি জমা দেওয়ার আগে আপনি এর আকার নির্ধারণ করতে পারেন এবং আকার খুব বড় হলে যথাযথ ব্যবস্থা নিতে পারেন।

    জাভা

    
    static final int MAX_REQUEST_BYTES = 41_937_920;
    
    ... (code to get the request object)
    
    int sizeInBytes = request.getSerializedSize();
    

    পাইথন

    
    from google.ads.googleads.client import GoogleAdsClient
    
    MAX_REQUEST_BYTES = 41937920
    
    ... (code to get the request object)
    
    size_in_bytes = request._pb.ByteSize()
    

    রুবি

    
    require 'google/ads/google_ads'
    
    MAX_REQUEST_BYTES = 41937920
    
    ... (code to get the request object)
    
    size_in_bytes = request.to_proto.bytesize
    

    পিএইচপি

    
    use Google\Ads\GoogleAds\V16\Resources\Campaign;
    
    const MAX_REQUEST_BYTES = 41937920;
    
    ... (code to get the request object)
    
    $size_in_bytes = $campaign->byteSize() . PHP_EOL;
    

    .NET

    
    using Google.Protobuf;
    const int MAX_REQUEST_BYTES = 41937920;
    
    ... (code to get the request object)
    
    int sizeInBytes = request.ToByteArray().Length;
    

    পার্ল

    
    use Devel::Size qw(total_size);
    use constant MAX_REQUEST_BYTES => 41937920;
    
    ... (code to get the request object)
    
    my $size_in_bytes = total_size($request);
    

একক মিউটেট অপারেশনের আকার

যদিও সামগ্রিক অনুরোধটি আরও বড় হতে পারে, ব্যাচের মধ্যে একটি একক মিউটেট অপারেশনের আকার সর্বোচ্চ ১০,৪৮৪,৪৮৮ বাইট (প্রায় ১০.৪৮ মেগাবাইট) পর্যন্ত সীমাবদ্ধ।