Ten en cuenta estas directrices cuando uses
BatchJobService.
Mejora la capacidad de procesamiento
Es preferible tener menos trabajos más grandes que muchos trabajos más pequeños.
Ordena las operaciones subidas por tipo de operación. Por ejemplo, si tu trabajo contiene operaciones para agregar campañas, grupos de anuncios y criterios de grupos de anuncios, ordena las operaciones en tu carga para que todas las operaciones de la campaña estén primero, seguidas de todas las operaciones del grupo de anuncios y, por último, todas las operaciones de criterios de grupos de anuncios.
Dentro de las operaciones del mismo tipo, puede mejorar el rendimiento agruparlas por recurso superior. Por ejemplo, si tienes una serie de objetos
AdGroupCriterionOperation, puede ser más eficiente agrupar las operaciones por grupo de anuncios, en lugar de mezclar operaciones que afectan los criterios de grupos de anuncios en diferentes grupos de anuncios.
Atomicidad en la división por lotes
Es posible que la API de Google Ads divida las operaciones en un trabajo por lotes enviado en lotes secundarios más pequeños para su procesamiento. Si no agrupas las operaciones relacionadas, como
las modificaciones de grupos de fichas dentro de un AssetGroup
y un AdGroup, de forma consecutiva dentro de un trabajo por lotes, es posible que la
API de Google Ads divida estas operaciones en diferentes lotes secundarios. Esta separación puede provocar que falle toda la modificación o que la cuenta quede en un estado incoherente.
Agrupación lógica
AssetGroupListingGroupFilterOperation
administra los grupos de fichas dentro de un AssetGroup, lo que
es común en las campañas de máximo rendimiento.
AdGroupCriterionOperation administra
los grupos de fichas dentro de un AdGroup, lo que es común en
las campañas de Shopping estándar. Ambos se usan para definir la segmentación de productos. Si realizas cambios que afectan la jerarquía de segmentación de productos en ambos contextos, agrupa estas operaciones de forma consecutiva en tu trabajo por lotes para asegurarte de que se apliquen juntas.
Coherencia de los datos
Para mantener la coherencia de los datos y evitar actualizaciones parciales, agrega operaciones relacionadas de grupos de fichas de forma consecutiva a tu trabajo por lotes. Este orden ayuda a agruparlas en lotes secundarios atómicos según la lógica de división por lotes de la API, lo que evita que tu cuenta quede en un estado incoherente.
Evita problemas de simultaneidad
Cuando envíes varios trabajos simultáneos para la misma cuenta, intenta reducir la probabilidad de que los trabajos operen en los mismos objetos al mismo tiempo, mientras mantienes tamaños de trabajo grandes. Muchos trabajos sin terminar, que tienen el estado de
RUNNING, intentan mutar el mismo conjunto de objetos, lo que puede generar condiciones similares a un interbloqueo que provoquen una ralentización grave e incluso fallas en el trabajo.No envíes varias operaciones que muten el mismo objeto en el mismo trabajo, ya que el resultado puede ser impredecible.
Recupera los resultados de forma óptima
No sondeos el estado del trabajo con demasiada frecuencia o corres el riesgo de alcanzar errores de límite de frecuencia.
No recuperes más de 1,000 resultados por página. El servidor podría mostrar menos debido a la carga o a otros factores.
El orden de los resultados será el mismo que el orden de carga.
Orientación adicional sobre el uso
Puedes establecer un límite superior para el tiempo que se permite ejecutar un trabajo por lotes antes de que se cancele. Cuando crees un trabajo por lotes nuevo, establece el
metadata.execution_limit_secondscampo en el límite de tiempo que prefieras, en segundos. No hay un límite de tiempo predeterminado si no se establecemetadata.execution_limit_seconds.Se recomienda agregar no más de 1,000 operaciones por
AddBatchJobOperationsRequesty usar elsequence_tokenpara subir el resto de las operaciones al mismo trabajo. Según el contenido de las operaciones, demasiadas operaciones en una solaAddBatchJobOperationsRequestpodrían causar un errorREQUEST_TOO_LARGE. Para solucionar este error, reduce la cantidad de operaciones y vuelve a intentar laAddBatchJobOperationsRequest.
Limitaciones
Cada
BatchJobadmite hasta un millón de operaciones.Cada cuenta puede tener hasta 100 trabajos activos o pendientes al mismo tiempo.
Los trabajos pendientes de más de 7 días se quitan automáticamente.
A partir de la v22, cada solicitud
AddBatchJobOperationstiene un límite de 10,000 operaciones de mutación por solicitud.A partir de la v22, para el
page_sizecampo enListBatchJobResultsRequest:- Si
page_sizeno está establecido o es 0, se establece de forma predeterminada en el máximo de 1,000. - Si
page_sizesupera los 1,000 o es inferior a 0, la API muestra unINVALID_PAGE_SIZEerror.
- Si
A partir de la v23, cada
AddBatchJobOperationsRequesttiene un tamaño máximo de 41,937,920 bytes. Si lo superas, recibirás unINTERNAL_ERROR. Puedes determinar el tamaño de la solicitud antes de enviarla y tomar las medidas adecuadas si es demasiado 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.bytesizePHP
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);
Tamaño de la operación de mutación única
Si bien la solicitud general puede ser más grande, el tamaño de una sola operación de mutación dentro del lote está limitado a 10,484,488 bytes (aproximadamente 10.48 MB).