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

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

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

  • कई छोटी नौकरियों के बजाय, कुछ बड़ी नौकरियों को प्राथमिकता दी जाती है.

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

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

एक साथ कई टास्क करने से जुड़ी समस्याओं से बचना

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

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

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

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

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

  • नतीजों का क्रम, अपलोड करने के क्रम जैसा ही होगा.

इस्तेमाल से जुड़े अन्य दिशा-निर्देश

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

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

सीमाएं

  • हर BatchJob, एक मिलियन ऑपरेशन तक के साथ काम करता है.

  • हर खाते में एक ही समय पर, ज़्यादा से ज़्यादा 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);