Best practice e limitazioni

Tieni presente queste linee guida quando utilizzi BatchJobService.

Migliorare la velocità effettiva

  • È preferibile un numero ridotto di job di grandi dimensioni rispetto a molti job di piccole dimensioni.

  • Ordina le operazioni caricate per tipo di operazione. Ad esempio, se il job contiene operazioni per aggiungere campagne, gruppi di annunci e criteri dei gruppi di annunci, ordina le operazioni nel caricamento in modo che tutte le operazioni della campagna siano eseguite per prime, seguite da tutte le operazioni del gruppo di annunci e infine da tutte le operazioni dei criteri dei gruppi di annunci.

  • All'interno delle operazioni dello stesso tipo, può migliorare il rendimento raggrupparle per risorsa principale. Ad esempio, se hai una serie di oggetti AdGroupCriterionOperation, può essere più efficiente raggruppare le operazioni per gruppo di annunci, anziché mescolare le operazioni che influiscono sui criteri dei gruppi di annunci in gruppi di annunci diversi.

Atomicità nella suddivisione batch

L'API Google Ads potrebbe suddividere le operazioni in un job batch inviato in batch secondari più piccoli per l'elaborazione. Se non raggruppi le operazioni correlate, ad esempio le modifiche dei gruppi di schede all'interno di un AssetGroup e di un AdGroup, in sequenza all'interno di un job batch, l'API Google Ads potrebbe suddividere queste operazioni in batch secondari diversi. Questa separazione può comportare il mancato completamento dell'intera modifica o lasciare l'account in uno stato incoerente.

Raggruppamento logico

AssetGroupListingGroupFilterOperation gestisce i gruppi di schede all'interno di un AssetGroup, il che è comune nelle campagne Performance Max. AdGroupCriterionOperation gestisce i gruppi di schede all'interno di un AdGroup, il che è comune nelle campagne Shopping standard. Entrambi vengono utilizzati per definire il targeting dei prodotti. Se apporti modifiche che influiscono sulla gerarchia di targeting dei prodotti in entrambi i contesti, raggruppa queste operazioni in sequenza nel job batch per assicurarti che vengano applicate insieme.

Coerenza dei dati

Per mantenere la coerenza dei dati ed evitare aggiornamenti parziali, aggiungi le operazioni dei gruppi di schede correlate in sequenza al job batch. Questo ordine consente di raggrupparli in batch secondari atomici in base alla logica di suddivisione batch dell'API, il che impedisce che l'account venga lasciato in uno stato incoerente.

Evitare problemi di concorrenza

  • Quando invii più job simultanei per lo stesso account, cerca di ridurre la probabilità che i job operino sugli stessi oggetti contemporaneamente, mantenendo al contempo le dimensioni dei job di grandi dimensioni. Molti job non completati, con lo stato di RUNNING, tentano di modificare lo stesso insieme di oggetti, il che può portare a condizioni di deadlock che causano un rallentamento significativo e persino errori dei job.

  • Non inviare più operazioni che modificano lo stesso oggetto nello stesso job, in quanto il risultato può essere imprevedibile.

Recuperare i risultati in modo ottimale

  • Non eseguire il polling dello stato del job troppo spesso, altrimenti rischi di riscontrare errori di limite di frequenza.

  • Non recuperare più di 1000 risultati per pagina. Il server potrebbe restituirne un numero inferiore a causa del carico o di altri fattori.

  • L'ordine dei risultati sarà lo stesso dell'ordine di caricamento.

Indicazioni aggiuntive sull'utilizzo

  • Puoi impostare un limite massimo per la durata di esecuzione di un job batch prima che venga annullato. Quando crei un nuovo job batch, imposta il metadata.execution_limit_seconds campo sul limite di tempo che preferisci, in secondi. Se metadata.execution_limit_seconds non è impostato, non è previsto un limite di tempo predefinito.

  • Ti consigliamo di aggiungere non più di 1000 operazioni per AddBatchJobOperationsRequest e di utilizzare sequence_token per caricare il resto delle operazioni nello stesso job. A seconda del contenuto delle operazioni, un numero eccessivo di operazioni in un singolo AddBatchJobOperationsRequest potrebbe causare un errore REQUEST_TOO_LARGE. Puoi gestire questo errore riducendo il numero di operazioni e riprovando AddBatchJobOperationsRequest.

Limitazioni

  • Ogni BatchJob supporta fino a un milione operazioni.

  • Ogni account può avere fino a 100 job attivi o in attesa contemporaneamente.

  • I job in attesa più vecchi di 7 giorni vengono rimossi automaticamente.

  • A partire dalla versione 22, ogni richiesta AddBatchJobOperations ha un limite di 10.000 operazioni di modifica per richiesta.

  • A partire dalla versione 22, per il page_size campo in ListBatchJobResultsRequest:

    • Se page_size non è impostato o è 0, il valore predefinito è il massimo di 1000.
    • Se page_size supera 1000 o è inferiore a 0, l'API restituisce un INVALID_PAGE_SIZE errore.
  • A partire dalla versione 23, ogni AddBatchJobOperationsRequest ha una dimensione massima di 41.937.920 byte. Se superi questo limite, riceverai un INTERNAL_ERROR. Puoi determinare la dimensione della richiesta prima dell'invio e intraprendere le azioni appropriate se è troppo grande.

    Java

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

    Python

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

    Ruby

    
    require 'google/ads/google_ads'
    
    MAX_REQUEST_BYTES = 41937920
    
    ... (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 = 41937920;
    
    ... (code to get the request object)
    
    $size_in_bytes = $campaign->byteSize() . PHP_EOL;
    

    .NET

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

    Perl

    
    use Devel::Size qw(total_size);
    use constant MAX_REQUEST_BYTES => 41937920;
    
    ... (code to get the request object)
    
    my $size_in_bytes = total_size($request);
    

Dimensione di una singola operazione di modifica

Sebbene la richiesta complessiva possa essere più grande, la dimensione di una singola operazione di modifica all'interno del batch è limitata a 10.484.488 byte (circa 10,48 MB).