أفضل الممارسات والقيود

يُرجى مراعاة هذه الإرشادات عند استخدام BatchJobService.

تحسين معدل نقل البيانات

  • يُفضّل استخدام عدد قليل من الوظائف الأكبر حجمًا بدلاً من العديد من الوظائف الأصغر حجمًا.

  • ترتيب العمليات المحمَّلة حسب نوع العملية على سبيل المثال، إذا كانت مهمتك تحتوي على عمليات لإضافة حملات ومجموعات إعلانية ومعايير مجموعات إعلانية، رتِّب العمليات في عملية التحميل بحيث تكون جميع عمليات الحملة أولاً، ثم جميع عمليات المجموعة الإعلانية، وأخيراً جميع عمليات معايير المجموعة الإعلانية.

  • ضمن العمليات من النوع نفسه، يمكن أن يؤدي تجميعها حسب المصدر الرئيسي إلى تحسين الأداء. على سبيل المثال، إذا كانت لديك سلسلة من عناصر AdGroupCriterionOperation، قد يكون من الأفضل تجميع العمليات حسب المجموعة الإعلانية، بدلاً من خلط العمليات التي تؤثّر في معايير المجموعة الإعلانية في مجموعات إعلانية مختلفة.

تجنُّب مشاكل المعالجة المتزامنة

  • عند إرسال عدة مهام متزامنة للحساب نفسه، حاوِل تقليل احتمالية تنفيذ المهام على العناصر نفسها في الوقت نفسه، مع الحفاظ على أحجام المهام الكبيرة. تحاول العديد من المهام غير المكتملة التي تحمل الحالة RUNNING تغيير المجموعة نفسها من العناصر، ما قد يؤدي إلى حالات تشبه مثبّت التجزئة، ما يؤدي إلى إبطاء شديد في الأداء وحتى تعذّر إكمال المهام.

  • لا ترسِل عمليات متعدّدة تُغيّر العنصر نفسه في مهمة المعالجة نفسها، لأنّ النتيجة قد تكون غير متوقّعة.

استرداد النتائج على النحو الأمثل

  • لا تُستخدِم استطلاعات حالة المهمة بشكل متكرّر جدًا، وإلا قد تواجه أخطاء تتعلّق بالحدّ الأقصى لمعدّل الزحف.

  • لا تستردّ أكثر من 1,000 نتيجة في كل صفحة. يمكن أن يعرض الخادم عددًا أقل من ذلك بسبب الحمولة أو عوامل أخرى.

  • سيكون ترتيب النتائج هو نفسه ترتيب التحميل.

إرشادات إضافية حول الاستخدام

  • يمكنك ضبط حدّ أقصى لمدة تشغيل إحدى مهام الدُفعات قبل إلغائها. عند إنشاء وظيفة مجمّعة جديدة، اضبط الحقل metadata.execution_limit_seconds على الحدّ الزمني المفضّل لديك، بالثواني. لا يتوفّر حدّ زمني افتراضي إذا لم يتم ضبط metadata.execution_limit_seconds.

  • ننصحك بعدم إضافة أكثر من 1,000 عملية لكل AddBatchJobOperationsRequest واستخدام sequence_token لتحميل بقية العمليات إلى المهمة نفسها. استنادًا إلى محتوى العمليات، قد يؤدي إجراء عدد كبير جدًا من العمليات في AddBatchJobOperationsRequest واحد إلى حدوث خطأ REQUEST_TOO_LARGE. يمكنك معالجة هذا الخطأ عن طريق تقليل عدد العمليات وإعادة محاولة AddBatchJobOperationsRequest.

القيود

  • يتيح كل BatchJob ما يصل إلى مليون عملية.

  • يمكن أن يتضمّن كل حساب ما يصل إلى 100 مهمة نشطة أو في انتظار المراجعة في الوقت نفسه.

  • تتم تلقائيًا إزالة المهام التي تنتظر المراجعة والتي مرّ عليها أكثر من 7 أيام.

  • يبلغ الحد الأقصى لحجم كل AddBatchJobOperationsRequest ‎10,484,504 بايت. وإذا تجاوزت هذا العدد، ستتلقّى INTERNAL_ERROR. يمكنك تحديد حجم الطلب قبل إرساله واتّخاذ الإجراء المناسب إذا كان كبيرًا جدًا.

    Java

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

    Python

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

    Ruby

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

    PHP

    
    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;
    

    NET.

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

    Perl

    
    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);