Gdy używasz BatchJobService
, weź pod uwagę te wskazówki.
Zwiększ przepustowość
Preferowana jest mniejsza liczba większych zadań niż wiele mniejszych.
Uporządkuj przesłane operacje według typu operacji. Jeśli np. Twoje zadanie zawiera operacje dodawania kampanii, grup reklam i kryteriów grup reklam, uporządkuj przesyłane operacje tak, aby wszystkie działania związane z kampanią były widoczne jako pierwsze, po nich wszystkie operacje związane z grupą reklam, a na koniec wszystkie operacje dotyczące kryteriów grupy reklam.
W ramach operacji tego samego typu można zwiększyć ich wydajność, grupując je według zasobu nadrzędnego. Jeśli na przykład masz serię obiektów
AdGroupCriterionOperation
, efektywniej jest grupować działania według grupy reklam, niż łączyć operacje, które wpływają na kryteria grupy reklam w różnych grupach reklam.
Unikanie problemów z równoczesnością
Przesyłając wiele zadań równoczesnych dla tego samego konta, spróbuj zmniejszyć prawdopodobieństwo wykonywania zadań na tych samych obiektach w tym samym czasie, przy zachowaniu dużych rozmiarów zadań. Wiele nieukończonych zadań (ze stanem
RUNNING
), które próbują zmodyfikować ten sam zbiór obiektów, może prowadzić do sytuacji przypominających zakleszczenie, które powodują duże spowolnienie, a nawet awarie.Nie przesyłaj wielu operacji, które zmieniają ten sam obiekt w tym samym zadaniu, ponieważ wynik może być nieprzewidywalny.
Optymalne uzyskiwanie wyników
Nie odpytuj stanu zadania zbyt często, ponieważ grozi to wystąpieniem błędów limitu liczby żądań.
Pobieraj maksymalnie 1000 wyników na stronę. Serwer może zwrócić ich mniej z powodu obciążenia lub innych czynników.
Kolejność wyników będzie taka sama jak w kolejności przesyłania.
Dodatkowe wskazówki dotyczące użytkowania
Możesz ustawić górną granicę czasu, przez jaki zadanie wsadowe może być uruchamiane, zanim zostanie anulowane. Podczas tworzenia nowego zadania wsadowego ustaw w polu
metadata.execution_limit_seconds
preferowany limit czasu (w sekundach). Jeśli zasadametadata.execution_limit_seconds
nie jest ustawiona, nie ma domyślnego limitu czasu.Zalecamy,aby do jednego zadania
AddBatchJobOperationsRequest
dodać nie więcej niż 1000 operacji i użyćsequence_token
do przesłania pozostałych operacji do tego samego zadania. W zależności od treści operacji zbyt wiele operacji w 1AddBatchJobOperationsRequest
może spowodować błądREQUEST_TOO_LARGE
. Aby rozwiązać ten problem, zmniejsz liczbę operacji i ponów próbęAddBatchJobOperationsRequest
.
Ograniczenia
Każdy zasób
BatchJob
obsługuje do miliona operacji.Na każdym koncie może być jednocześnie do 100 aktywnych lub oczekujących zadań.
Oczekujące zadania starsze niż 7 dni są automatycznie usuwane.
Każdy element
AddBatchJobOperationsRequest
może mieć maksymalnie 10 484 504 bajty. Jeśli przekroczysz ten limit, otrzymaszINTERNAL_ERROR
. Przed przesłaniem prośby możesz określić jej rozmiar i podjąć odpowiednie działania, jeśli będzie za duża.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);