सबसे सही तरीके और सीमाएं

BatchJobService का इस्तेमाल करते समय इन दिशा-निर्देशों का ध्यान रखें.

थ्रूपुट को बेहतर बनाना

  • कई छोटे-छोटे कामों के बजाय, कम बड़े काम करना बेहतर होता है.

  • कार्रवाई के टाइप के हिसाब से, अपलोड की गई कार्रवाइयों को क्रम से लगाएं. उदाहरण के लिए, अगर आपको कैंपेन, विज्ञापन ग्रुप, और विज्ञापन ग्रुप के मानदंड जोड़ने हैं, तो अपलोड किए जाने वाले डेटा में इन कार्रवाइयों को इस क्रम में रखें: सबसे पहले, कैंपेन से जुड़ी सभी कार्रवाइयां, फिर विज्ञापन ग्रुप से जुड़ी सभी कार्रवाइयां, और आखिर में विज्ञापन ग्रुप के मानदंड से जुड़ी सभी कार्रवाइयां.

  • एक ही तरह के ऑपरेशन के लिए, उन्हें पैरंट रिसॉर्स के हिसाब से ग्रुप करने पर परफ़ॉर्मेंस बेहतर हो सकती है. उदाहरण के लिए, अगर आपके पास AdGroupCriterionOperation ऑब्जेक्ट की एक सीरीज़ है, तो विज्ञापन ग्रुप के हिसाब से कार्रवाइयों को ग्रुप करना ज़्यादा असरदार हो सकता है. ऐसा इसलिए, क्योंकि अलग-अलग विज्ञापन ग्रुप में विज्ञापन ग्रुप के मानदंड पर असर डालने वाली कार्रवाइयों को आपस में मिलाने से बेहतर नतीजे मिलते हैं.

एक साथ कई अनुरोध मिलने से जुड़ी समस्याओं से बचना

  • एक ही खाते के लिए एक साथ कई जॉब सबमिट करते समय, इस बात का ध्यान रखें कि एक ही समय में एक ही ऑब्जेक्ट पर काम करने वाली जॉब की संख्या कम हो. साथ ही, जॉब का साइज़ बड़ा हो. कई ऐसे जॉब हैं जो पूरे नहीं हुए हैं और जिनका स्टेटस RUNNING है. ये जॉब, एक ही सेट के ऑब्जेक्ट में बदलाव करने की कोशिश करते हैं. इससे डेडलॉक जैसी स्थितियां पैदा हो सकती हैं. इसकी वजह से, प्रोसेस बहुत धीमी हो जाती है और जॉब पूरे नहीं हो पाते.

  • एक ही जॉब में, एक ही ऑब्जेक्ट में बदलाव करने वाली कई कार्रवाइयां सबमिट न करें. इससे नतीजे का अनुमान लगाना मुश्किल हो सकता है.

नतीजे बेहतर तरीके से पाना

  • जॉब की स्थिति के बारे में बार-बार जानकारी न लें. ऐसा करने पर, आपको दर की सीमा से जुड़ी गड़बड़ियां मिल सकती हैं.

  • हर पेज पर 1,000 से ज़्यादा नतीजे न पाएं. सर्वर, लोड या अन्य वजहों से इससे कम नतीजे दिखा सकता है.

  • नतीजे, अपलोड किए गए क्रम में ही दिखेंगे.

इस्तेमाल से जुड़ी अन्य जानकारी

  • आपके पास यह तय करने का विकल्प होता है कि बैच जॉब को रद्द करने से पहले, उसे कितनी देर तक चलने की अनुमति दी जाए. नया बैच जॉब बनाते समय, metadata.execution_limit_seconds फ़ील्ड को अपनी पसंद के मुताबिक समयसीमा पर सेट करें. यह समयसीमा सेकंड में होती है. अगर metadata.execution_limit_seconds सेट नहीं है, तो समयसीमा की कोई डिफ़ॉल्ट वैल्यू नहीं होती.

  • हमारा सुझाव है कि हर AddBatchJobOperationsRequest में 1,000 से ज़्यादा कार्रवाइयां न जोड़ें. साथ ही, बाकी कार्रवाइयों को उसी जॉब में अपलोड करने के लिए, sequence_token का इस्तेमाल करें. कार्रवाइयों के कॉन्टेंट के आधार पर, एक AddBatchJobOperationsRequest में बहुत ज़्यादा कार्रवाइयां होने पर, REQUEST_TOO_LARGE गड़बड़ी हो सकती है. इस गड़बड़ी को ठीक करने के लिए, कार्रवाइयों की संख्या कम करें और AddBatchJobOperationsRequest को फिर से आज़माएं.

सीमाएं

  • हर BatchJob में ज़्यादा से ज़्यादा 10 लाख कार्रवाइयां की जा सकती हैं.

  • हर खाते में एक समय पर ज़्यादा से ज़्यादा 100 नौकरियां चालू या लंबित हो सकती हैं.

  • सात दिन से ज़्यादा समय से प्रोसेस नहीं किए गए जॉब अपने-आप हट जाते हैं.

  • हर 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);