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) के तुरंत बाद, एक हीAssetGroupको टारगेट करने वाली ज़्यादा से ज़्यादा 999AssetGroupAssetOperation(create) कार्रवाइयां. अगर ग्रुप में कोई भी कार्रवाई पूरी नहीं होती है, तोBatchJobError.ASSET_GROUP_AND_ASSET_GROUP_ASSET_TRANSACTION_FAILUREदिखता है. हरAssetGroupOperation(updateयाremove), अपने-आप में एक अलग सिंगल-ऑपरेशन सब-बैच में काम करता है.- ब्रैंड के दिशा-निर्देशों के साथ परफ़ॉर्मेंस मैक्स कैंपेन
CampaignOperation(create) चालू किया गया हो (brand_guidelines_enabledकोtrueपर सेट किया गया हो या सेट न किया गया हो, क्योंकि यह डिफ़ॉल्ट रूप सेtrueपर सेट होता है. हालांकि, इसेfalseपर सेट किया जा सकता है या यात्रा के लक्ष्यों के लिए परफ़ॉर्मेंस मैक्स कैंपेन बनाया जा सकता है). इसके तुरंत बाद, एक हीCampaignको टारगेट करने वाले ज़्यादा से ज़्यादा 999CampaignAssetOperation(create) ऑपरेशन किए गए हों (अगर ग्रुप में कोई भी ऑपरेशन पूरा नहीं होता है, तोBatchJobError.CAMPAIGN_AND_CAMPAIGN_ASSET_TRANSACTION_FAILUREगड़बड़ी का मैसेज दिखता है). Merchant Center फ़ीड वाले परफ़ॉर्मेंस मैक्स कैंपेन को, एक ही ऐटम सब-बैच में ब्रैंडCampaignAssetसंसाधन लिंक किए बिना बनाया जा सकता है.
AssetGroup और परफ़ॉर्मेंस मैक्स Campaign, दोनों के लिए सब-बैच बनाए जा सकते हैं. हर सब-बैच में कुल 1,000 कार्रवाइयां की जा सकती हैं. अगर 999 से ज़्यादा चाइल्ड create कार्रवाइयां होती हैं, तो वे अगले नॉन-एटॉमिक सब-बैच में चली जाती हैं:
- पैरंट
createऑपरेशन (resource_nameonAssetGroupयाCampaign) और उसके बाद होने वाले चाइल्डcreateऑपरेशन (asset_grouponAssetGroupAssetयाcampaignonCampaignAsset) में, एक ही नेगेटिव अस्थायी आईडी होना चाहिए. - नए
Assetसंसाधनों के लिए, ज़रूरीAssetOperation(create) कार्रवाइयों को पैरंटAssetGroupOperationयाCampaignOperation(create) से पहले रखें. इन्हें पैरंटcreateऔर उसके चाइल्ड लिंकcreateकार्रवाइयों के बीच कभी न रखें. ऐसा करने पर, एटॉमिक सब-बैच तुरंत बंद हो जाएगा और पैरंट संसाधन बनाने की प्रोसेस, उसकी लिंक की गई ऐसेट से अलग हो जाएगी.
जब कोई एटॉमिक सब-बैच पूरा नहीं होता है, तो गड़बड़ी वाली कार्रवाई के BatchJobResult.status में पुष्टि से जुड़ी गड़बड़ी की जानकारी होती है. वहीं, उस सब-बैच में मौजूद बाकी कार्रवाइयों को रोल बैक कर दिया जाता है. इसके साथ ही, उस सब-बैच के लिए लेन-देन से जुड़ी गड़बड़ी की जानकारी भी दी जाती है. गड़बड़ी की मुख्य वजह का पता लगाने के लिए, आस-पास की उन BatchJobResult एंट्री की जांच करें जिनमें एक ही AdGroup, AssetGroup या Campaign आईडी शेयर किया गया है.
अगर इनमें से किसी भी ग्रुप में, एक के बाद एक मिलती-जुलती कार्रवाइयां नहीं जोड़ी जाती हैं, तो 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सेट नहीं है, तो डिफ़ॉल्ट समयसीमा नहीं होती.हालांकि, प्रोटोकॉल के हिसाब से हर अनुरोध में 10,000 कार्रवाइयां की जा सकती हैं, लेकिन हमारा सुझाव है कि हर
AddBatchJobOperationsRequestमें 1,000 से ज़्यादा कार्रवाइयां न जोड़ें. साथ ही, बाकी कार्रवाइयों को उसी जॉब में अपलोड करने के लिए,sequence_tokenका इस्तेमाल करें. ऑपरेशंस के साइज़ के आधार पर, एकAddBatchJobOperationsRequestमें बहुत ज़्यादा ऑपरेशंस भेजने से,BatchJobError.REQUEST_TOO_LARGEगड़बड़ी हो सकती है. इस गड़बड़ी को ठीक करने के लिए, कार्रवाइयों की संख्या कम करें औरAddBatchJobOperationsRequestको फिर से आज़माएं.
सीमाएं
हर
BatchJobमें ज़्यादा से ज़्यादा 10 लाख कार्रवाइयां की जा सकती हैं.AddBatchJobOperationsको कॉल करते समय इस सीमा से ज़्यादा वैल्यू देने पर,ResourceCountLimitExceededError.RESOURCE_LIMITगड़बड़ी दिखती है. साथ ही,ErrorDetails.resource_count_detailsमेंResourceLimitType.BATCH_JOB_OPERATIONS_PER_JOBदिखता है.हर खाते में एक साथ ज़्यादा से ज़्यादा 100 चालू या लंबित जॉब हो सकती हैं.
MutateBatchJobकी मदद से बैच जॉब बनाते समय, इस सीमा से ज़्यादा वैल्यू डालने पर,ResourceCountLimitExceededError.RESOURCE_LIMITगड़बड़ी दिखती है. साथ ही,ErrorDetails.resource_count_detailsमेंResourceLimitType.BATCH_JOBS_PER_CUSTOMERदिखता है.सात दिन से ज़्यादा समय से लंबित जॉब अपने-आप हट जाती हैं.
हर
AddBatchJobOperationsRequestके लिए, हर अनुरोध में बदलाव करने की कार्रवाइयों की संख्या 10,000 से ज़्यादा नहीं होनी चाहिए. एक अनुरोध में 10,000 से ज़्यादा कार्रवाइयां करने पर,BatchJobError.REQUEST_TOO_LARGEगड़बड़ी का मैसेज दिखता है.ListBatchJobResultsRequestमें मौजूदpage_sizeफ़ील्ड के लिए:- अगर
page_sizeको सेट नहीं किया गया है या यह0पर सेट है, तो डिफ़ॉल्ट रूप से यह1000पर सेट हो जाता है. - अगर
page_size,1000से ज़्यादा है या0से कम है, तो एपीआईBatchJobError.INVALID_PAGE_SIZEगड़बड़ी दिखाता है.
- अगर
हर
AddBatchJobOperationsRequestका साइज़ 41,937,920 बाइट से ज़्यादा नहीं होना चाहिए. इस सीमा से ज़्यादा अनुरोध करने पर, आपको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.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));
बदलाव करने की एक कार्रवाई का साइज़
पूरे अनुरोध का साइज़ 4,19,37,920 बाइट तक हो सकता है. हालांकि, बैच में मौजूद किसी एक MutateOperation के क्रमबद्ध किए गए साइज़ की सीमा 1,04,84,504 बाइट (10 MiB माइनस 1,256 बाइट) है. इस सीमा से ज़्यादा अनुरोध करने पर, BatchJobError.REQUEST_TOO_LARGE गड़बड़ी का मैसेज दिखता है. ध्यान दें कि BatchJobError.REQUEST_TOO_LARGE के रेफ़रंस दस्तावेज़ में, 1,04,84,504 बाइट की सीमा बताई गई है. हालांकि, अनुरोध से जुड़ी तीन सीमाओं (अनुरोध के लिए कुल 4,19,37,920 बाइट, एक कार्रवाई के लिए 1,04,84,504 बाइट या हर कॉल के लिए 10,000 कार्रवाइयां) में से किसी भी सीमा के पार होने पर, AddBatchJobOperations यही गड़बड़ी कोड दिखाता है. साथ ही, गड़बड़ी के message फ़ील्ड में यह बताया जाता है कि किस सीमा का उल्लंघन हुआ है.