最佳实践和限制

在使用 BatchJobService

提高吞吐量

  • 少量大型作业优于许多小型作业。

  • 按操作类型对上传的操作进行排序。例如,如果您的工作 包含用于添加广告系列、广告组和广告组条件的操作 对上传中的操作进行排序,以便所有广告系列 操作首先是 广告组操作,以及 广告组条件操作

  • 对于同一类型的操作,通过对它们进行分组可提升性能 所有资源例如,如果您有一系列 AdGroupCriterionOperation 个对象,将对象分组可以更高效地 操作,而不是混用影响广告的操作 。

避免并发问题

  • 在为同一账号提交多个并发作业时,尽量减少 同时对相同对象执行操作的可能性,而 大型语言模型。有许多未完成的作业(状态为 RUNNING) 尝试对同一组对象执行 mutate 操作可能会导致类似死锁的情况 从而导致运行速度严重降低,甚至造成作业失败。

  • 请勿提交在同一对象中对同一对象执行 mutate 操作的多个操作 执行作业,因为这样做可能会导致不可预测。

以最优方式检索结果

  • 请勿过于频繁地轮询作业状态,否则可能会达到速率限制 错误。

  • 每页检索的结果不要超过 1,000 个。服务器可能会返回 或其他因素

  • 结果的顺序与上传顺序相同。

其他使用指南

  • 您可以设置允许批量作业在多久之前运行多长时间的上限 正在取消。创建新的批量作业时,请将 metadata.execution_limit_seconds 字段设置为首选时间限制(以秒为单位)。没有默认时间 如果未设置 metadata.execution_limit_seconds,则使用该值。

  • 建议每次最多添加 1,000 次操作 AddBatchJobOperationsRequest 并使用 sequence_token 将其余操作上传到同一个作业。根据 操作内容,单个操作中的操作过多 AddBatchJobOperationsRequest 可能会导致 REQUEST_TOO_LARGE 错误。您 可以通过减少操作数并重试 AddBatchJobOperationsRequest

限制

  • 每个 BatchJob 最多支持一百万个 操作。

  • 每个账号最多可同时拥有 100 个有效或待处理的作业。

  • 系统会自动移除 7 天前的待处理作业。

  • 每个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);