بهترین روش ها و محدودیت ها

هنگام استفاده از BatchJobService این دستورالعمل‌ها را در نظر بگیرید.

بهبود توان عملیاتی

  • تعداد کمتر کارهای بزرگتر نسبت به تعداد زیاد کارهای کوچکتر ترجیح داده می‌شود.

  • عملیات آپلود شده را بر اساس نوع عملیات مرتب کنید. به عنوان مثال، اگر کار شما شامل عملیات اضافه کردن کمپین‌ها، گروه‌های تبلیغاتی و معیارهای گروه تبلیغاتی است، عملیات موجود در آپلود خود را طوری مرتب کنید که ابتدا همه عملیات کمپین ، سپس همه عملیات گروه تبلیغاتی و در نهایت همه عملیات معیارهای گروه تبلیغاتی قرار گیرند.

  • در عملیات‌های هم نوع، گروه‌بندی آنها بر اساس منبع والد می‌تواند عملکرد را بهبود بخشد. به عنوان مثال، اگر مجموعه‌ای از اشیاء AdGroupCriterionOperation دارید، گروه‌بندی عملیات بر اساس گروه تبلیغاتی می‌تواند کارآمدتر از ترکیب عملیاتی باشد که بر معیارهای گروه تبلیغاتی در گروه‌های تبلیغاتی مختلف تأثیر می‌گذارند.

از مشکلات همزمانی جلوگیری کنید

  • هنگام ارسال چندین کار همزمان برای یک حساب کاربری، سعی کنید احتمال اجرای همزمان کارها روی اشیاء مشابه را کاهش دهید، در حالی که اندازه کارهای بزرگ را حفظ کنید. بسیاری از کارهای ناتمام، که وضعیت در RUNNING دارند، سعی می‌کنند مجموعه اشیاء یکسانی را تغییر دهند، که می‌تواند منجر به شرایط بن‌بست مانند شود و در نتیجه سرعت کار به شدت کاهش یابد و حتی کار از کار بیفتد.

  • چندین عملیات که یک شیء را در یک کار تغییر می‌دهند، ارسال نکنید، زیرا نتیجه می‌تواند غیرقابل پیش‌بینی باشد.

بازیابی نتایج به صورت بهینه

  • وضعیت کار را خیلی مرتب بررسی نکنید، وگرنه با خطاهای مربوط به محدودیت نرخ مواجه می‌شوید.

  • بیش از ۱۰۰۰ نتیجه در هر صفحه بازیابی نکنید. سرور می‌تواند به دلیل حجم کاری یا عوامل دیگر، کمتر از این مقدار را برگرداند.

  • ترتیب نتایج مشابه ترتیب آپلود خواهد بود.

راهنمایی استفاده اضافی

  • شما می‌توانید برای مدت زمانی که یک کار دسته‌ای قبل از لغو شدن اجازه اجرا دارد، یک حد بالا تعیین کنید. هنگام ایجاد یک کار دسته‌ای جدید، فیلد metadata.execution_limit_seconds را روی محدودیت زمانی دلخواه خود، بر حسب ثانیه، تنظیم کنید. اگر metadata.execution_limit_seconds تنظیم نشده باشد، هیچ محدودیت زمانی پیش‌فرضی وجود ندارد.

  • توصیه می‌شود که در هر AddBatchJobOperationsRequest بیش از ۱۰۰۰ عملیات اضافه نکنید و از sequence_token برای آپلود بقیه عملیات به همان job استفاده کنید. بسته به محتوای عملیات، تعداد زیاد عملیات در یک AddBatchJobOperationsRequest می‌تواند باعث خطای REQUEST_TOO_LARGE شود. می‌توانید با کاهش تعداد عملیات و تلاش مجدد AddBatchJobOperationsRequest ، این خطا را مدیریت کنید.

محدودیت‌ها

  • هر BatchJob تا یک میلیون عملیات را پشتیبانی می‌کند.

  • هر حساب کاربری می‌تواند تا ۱۰۰ شغل فعال یا در انتظار را به طور همزمان داشته باشد.

  • کارهای در حال انتظار که بیش از ۷ روز از تاریخ انقضای آنها گذشته باشد، به طور خودکار حذف می‌شوند.

  • از نسخه ۲۲، هر درخواست AddBatchJobOperations محدودیت ۱۰،۰۰۰ عملیات جهش در هر درخواست را دارد.

  • از نسخه ۲۲، برای فیلد page_size در ListBatchJobResultsRequest :

    • اگر page_size تنظیم نشده باشد یا 0 باشد، به طور پیش‌فرض روی حداکثر 1000 قرار می‌گیرد.
    • اگر page_size از ۱۰۰۰ بیشتر یا از ۰ کمتر باشد، API خطای INVALID_PAGE_SIZE را برمی‌گرداند.
  • هر AddBatchJobOperationsRequest حداکثر اندازه 10,484,504 بایت دارد. اگر از این مقدار تجاوز کنید، خطای INTERNAL_ERROR دریافت خواهید کرد. می‌توانید قبل از ارسال، اندازه درخواست را تعیین کنید و در صورت بزرگ بودن بیش از حد، اقدام مناسب را انجام دهید.

    جاوا

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

    پایتون

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

    روبی

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

    پی اچ پی

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

    دات نت

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

    پرل

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