يُرجى مراعاة هذه الإرشادات عند استخدام BatchJobService.
تحسين معدل نقل البيانات
يُفضّل استخدام عدد أقل من المهام الأكبر حجمًا بدلاً من العديد من المهام الأصغر حجمًا.
رتِّب العمليات المحمَّلة حسب نوع العملية (باستثناء العمليات المترابطة التي يجب تجميعها بشكل متتابع في دُفعات فرعية ذرية). على سبيل المثال، إذا كانت مهمتك تتضمّن عمليات لإضافة حملات عادية ومجموعات إعلانية ومعايير مجموعات إعلانية، رتِّب العمليات في عملية التحميل بحيث تكون جميع عمليات الحملة أولاً، تليها جميع عمليات المجموعة الإعلانية، وأخيرًا جميع عمليات معايير المجموعة الإعلانية.
في العمليات من النوع نفسه، يمكن أن يؤدي تجميعها حسب المورد الرئيسي إلى تحسين الأداء. على سبيل المثال، إذا كان لديك سلسلة من عناصر
AdGroupCriterionOperation، سيكون من الأجدى تجميع العمليات حسب المجموعة الإعلانية بدلاً من دمج العمليات التي تؤثّر في معايير المجموعة الإعلانية في مجموعات إعلانية مختلفة.
التجزئة الذرية في التقسيم المجمّع
تقسّم Google Ads API العمليات في مهمة مُجمَّعة تم إرسالها إلى مجموعات فرعية أصغر للمعالجة. في حين يتم تنفيذ الدُفعات الفرعية العادية مع تفعيل ميزة "الفشل الجزئي"، تتم معالجة الدُفعات الفرعية لعمليات معيّنة مترابطة بشكل متكامل كمعاملة واحدة:
- عمليات
AdGroupCriterionOperationمتتالية (createوupdateوremove) لمعاييرLISTING_GROUP(AdGroupCriterion.listing_group) تستهدفAdGroupنفسه (تتعذّر معCriterionError.LISTING_GROUP_ERROR_IN_ANOTHER_OPERATIONفي حال تعذُّر أي عملية في المجموعة). - عمليات
AssetGroupListingGroupFilterOperationمتتالية (createوupdateوremove) تستهدفAssetGroupنفسه (تتعذّر العملية معBatchJobError.ASSET_GROUP_LISTING_GROUP_FILTER_TRANSACTION_FAILUREإذا تعذّرت أي عملية في المجموعة). AssetGroupOperation(create) متبوعًا مباشرةً بما يصل إلى 999 عمليةAssetGroupAssetOperation(create) تستهدفAssetGroupنفسه (يتعذّر التنفيذ مع ظهور الخطأBatchJobError.ASSET_GROUP_AND_ASSET_GROUP_ASSET_TRANSACTION_FAILUREفي حال تعذّر تنفيذ أي عملية في المجموعة). يتم تنفيذ كلAssetGroupOperation(updateأوremove) في دفعة فرعية مستقلة خاصة به تتضمّن عملية واحدة.CampaignOperation(create) في "حملات الأداء الأفضل" مع تفعيل "إرشادات العلامة التجارية" (يتم ضبطbrand_guidelines_enabledعلىtrueأو تركه بدون ضبط، لأنّ القيمة التلقائية هيtrueما لم يتم ضبطه صراحةً علىfalseأو إنشاء "حملة أداء أفضل" مستندة إلى أهداف السفر) يتبعه مباشرةً ما يصل إلى 999 عمليةCampaignAssetOperation(create) تستهدفCampaignنفسه (يتعذّر التنفيذ معBatchJobError.CAMPAIGN_AND_CAMPAIGN_ASSET_TRANSACTION_FAILUREإذا تعذّر تنفيذ أي عملية في المجموعة). يمكن إنشاء "حملات الأداء الأفضل" في قطاع البيع بالتجزئة (التي تتضمّن خلاصة على Merchant Center) بدون ربط مواد عرض العلامة التجاريةCampaignAssetفي الدفعة الفرعية الذرية نفسها.
بالنسبة إلى الدُفعات الفرعية لإنشاء كلّ من AssetGroup و"حملات الأداء الأفضل"Campaign (ما يصل إلى 1,000 عملية إجمالاً لكل دفعة فرعية، وأي عمليات create فرعية تتجاوز 999 عملية يتم نقلها إلى الدفعة الفرعية التالية غير الذرية):
- يجب أن تحدّد عملية
createالرئيسية (resource_nameعلىAssetGroupأوCampaign) وعملياتcreateالتابعة المتتالية (asset_groupعلىAssetGroupAssetأوcampaignعلىCampaignAsset) معرّفًا مؤقتًا سلبيًا نفسه. - ضَع أي عمليات
AssetOperation(create) قبل عمليات إنشاء مواردAssetجديدة، وليس بين عمليات إنشاء المورد الرئيسيAssetGroupOperationأوCampaignOperation(create)، لأنّ ذلك سيؤدي إلى إغلاق الدفعة الفرعية الذرية على الفور وفصل عملية إنشاء المورد الرئيسي عن مواد العرض المرتبطة به.createcreate
عندما تفشل مجموعة فرعية ذرية، يحتوي BatchJobResult.status للعملية المخالفة على خطأ التحقّق الأساسي، بينما يتم التراجع عن العمليات المتبقية في تلك المجموعة الفرعية مع خطأ المعاملة المقابل لتلك المجموعة الفرعية. افحص إدخالات BatchJobResult المجاورة التي تشترك في المعرّف نفسه AdGroup أو AssetGroup أو Campaign لتحديد الخطأ الأساسي.
في حال عدم إضافة العمليات ذات الصلة في أي من هذه المجموعات بشكل متتابع، تقسم Google Ads API هذه العمليات على دفعات فرعية منفصلة، ما يؤدي إلى عدم استيفاء التعديل للحد الأدنى من متطلبات مواد العرض أو ترك بنية مجموعات بيانات المؤسسة غير مكتملة. راجِع مقالتَي استخدام فلاتر مجموعات بيانات المتجر في المهام المجمّعة و معالجة على دفعات في "حملات الأداء الأفضل" للحصول على التفاصيل.
التجميع المنطقي
عند تعديل تسلسل هرمي لاستهداف المنتجات (AssetGroupListingGroupFilterOperation في "حملات الأداء الأفضل" أو AdGroupCriterionOperation في "حملات Shopping") أو إنشاء AssetGroup أو Campaign جديد في "حملات الأداء الأفضل"، يجب تجميع كل العمليات التي تستهدف مرجعًا رئيسيًا واحدًا (AssetGroup أو AdGroup أو Campaign) على التوالي. يقلّل ذلك من التنازع على الأقفال في الخلفية ويحافظ على تماسك الأشجار المترابطة.
اتساق البيانات
بما أنّه يتم التحقّق من صحة بنية فلاتر مجموعات بيانات المؤسسة ومتطلبات مواد العرض في "حملات الأداء الأفضل" في نهاية كل معاملة فرعية مجمّعة، تجنَّب تقسيم التعديلات على المرجع الرئيسي نفسه على نطاقات غير متجاورة في مهمة أو على مستوى مهام متزامنة.
تجنُّب مشاكل التزامن
عند إرسال مهام متزامنة متعددة للحساب نفسه، قلِّل احتمالية تشغيل المهام على الكائنات نفسها في الوقت نفسه مع الحفاظ على أحجام المهام الكبيرة. يمكن أن تؤدي العديد من المهام غير المكتملة التي تحمل الحالة
RUNNINGوتحاول تعديل المجموعة نفسها من العناصر إلى حالات شبيهة بالتعطّل، ما يؤدي إلى تباطؤ شديد وحتى إلى فشل المهام.لا ترسِل عمليات متعددة تعدّل الكائن نفسه في مهمة واحدة، لأنّ النتيجة قد تكون غير متوقعة.
استرداد النتائج على النحو الأمثل
لا تستقصِ عن حالة المهمة بشكل متكرر جدًا، وإلا ستواجه أخطاء الحدّ الأقصى لمعدّل الطلبات.
اترك قيمة
page_sizeغير مضبوطة (أو اضبطها على الحد الأقصى وهو1000) عند استدعاءListBatchJobResultsلتقليل عدد الرحلات المتكررة لتقسيم الصفحات، ولا تضبط قيمةresponse_content_typeعلىMUTABLE_RESOURCEإلا إذا كان تطبيقك يتفحّص حقول الموارد التي تم إرجاعها بما يتجاوزresource_name.يكون ترتيب النتائج هو نفسه ترتيب التحميل.
إرشادات إضافية حول الاستخدام
يمكنك ضبط حدّ أعلى لمدة السماح بتشغيل مهمة مجمّعة قبل إلغائها. عند إنشاء مهمة معالجة مجمّعة جديدة، اضبط الحقل
metadata.execution_limit_secondsعلى الحدّ الزمني المفضّل لديك، بالثواني. لا يوجد حد زمني تلقائي إذا لم يتم ضبطmetadata.execution_limit_seconds.مع أنّ الحد الأقصى للبروتوكول هو 10,000 عملية لكل طلب، ننصح بعدم إضافة أكثر من 1,000 عملية لكل
AddBatchJobOperationsRequestواستخدامsequence_tokenلتحميل بقية العمليات إلى المهمة نفسها. استنادًا إلى حجم العمليات، قد يؤدي إرسال عدد كبير جدًا من العمليات فيAddBatchJobOperationsRequestواحد إلى حدوث خطأ فيBatchJobError.REQUEST_TOO_LARGE. يمكنك التعامل مع هذا الخطأ من خلال تقليل عدد العمليات وإعادة محاولةAddBatchJobOperationsRequest.
القيود
يمكن لكل
BatchJobتنفيذ ما يصل إلى مليون عملية. سيؤدي تجاوز هذا الحدّ عند طلبAddBatchJobOperationsإلى عرض الخطأResourceCountLimitExceededError.RESOURCE_LIMIT(معResourceLimitType.BATCH_JOB_OPERATIONS_PER_JOBفيErrorDetails.resource_count_details).يمكن أن يحتوي كل حساب على ما يصل إلى 100 مهمة نشطة أو في انتظار المراجعة في الوقت نفسه. سيؤدي تجاوز هذا الحد عند إنشاء مهمة مجمّعة باستخدام
MutateBatchJobإلى عرض الخطأResourceCountLimitExceededError.RESOURCE_LIMIT(معResourceLimitType.BATCH_JOBS_PER_CUSTOMERفيErrorDetails.resource_count_details).تتم تلقائيًا إزالة طلبات البحث المعلقة التي مرّ عليها أكثر من 7 أيام.
يبلغ الحدّ الأقصى لعدد عمليات التعديل في كل
AddBatchJobOperationsRequest10,000 عملية لكل طلب. يؤدي تجاوز 10,000 عملية في طلب واحد إلى عرض الخطأBatchJobError.REQUEST_TOO_LARGE.بالنسبة إلى الحقل
page_sizeفيListBatchJobResultsRequest:- إذا لم يتم ضبط
page_sizeأو كانت القيمة0، سيتم ضبط القيمة التلقائية على الحد الأقصى وهو1000. - إذا تجاوزت قيمة
page_sizeالقيمة1000أو كانت أقل من0، ستعرض واجهة برمجة التطبيقات الخطأBatchJobError.INVALID_PAGE_SIZE.
- إذا لم يتم ضبط
يبلغ الحد الأقصى لحجم كل
AddBatchJobOperationsRequest41,937,920 بايت. في حال تجاوز هذا الحد، سيظهر لك الخطأBatchJobError.REQUEST_TOO_LARGE(أو الخطأINTERNAL_ERRORإذا تم الرفض في طبقة النقل). يمكنك تحديد حجم الطلب المتسلسل قبل إرساله واتخاذ الإجراء المناسب إذا كان كبيرًا جدًا:جافا
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));
حجم عملية التعديل الفردية
على الرغم من أنّ إجمالي حجم الطلب يمكن أن يصل إلى 41,937,920 بايت، إلا أنّ الحجم التسلسلي لـ MutateOperation واحد ضمن الدفعة يبلغ 10,484,504 بايت كحد أقصى (10 ميبيبايت ناقص 1,256 بايت). سيؤدي تجاوز هذا الحد إلى ظهور الخطأ BatchJobError.REQUEST_TOO_LARGE. يُرجى العِلم أنّه على الرغم من أنّ المستندات المرجعية الخاصة بـ BatchJobError.REQUEST_TOO_LARGE تشير إلى الحدّ الأقصى البالغ 10,484,504 بايت، تعرض AddBatchJobOperations رمز الخطأ نفسه عند تجاوز أيّ من الحدود القصوى الثلاثة للطلبات (إجمالي عدد بايتات الطلبات البالغ 41,937,920 بايت أو عدد بايتات العملية الواحدة البالغ 10,484,504 بايت أو 10,000 عملية لكلّ طلب)، مع تحديد الحقل message في الخطأ للحدّ الذي تمّ تجاوزه.