Các phương pháp hay nhất và hạn chế

Hãy xem xét các nguyên tắc sau khi sử dụng BatchJobService.

Cải thiện thông lượng

  • Bạn nên chạy ít công việc lớn hơn thay vì nhiều công việc nhỏ hơn.

  • Sắp xếp các thao tác đã tải lên theo loại thao tác. Ví dụ: nếu công việc của bạn chứa các thao tác để thêm chiến dịch, nhóm quảng cáo và tiêu chí nhóm quảng cáo, hãy sắp xếp các thao tác trong tệp tải lên sao cho tất cả thao tác chiến dịch xuất hiện trước tiên, theo sau là tất cả thao tác nhóm quảng cáo và cuối cùng là tất cả thao tác tiêu chí nhóm quảng cáo.

  • Trong các thao tác thuộc cùng một loại, việc nhóm các thao tác đó theo tài nguyên mẹ có thể giúp cải thiện hiệu suất. Ví dụ: nếu bạn có một loạt đối tượng AdGroupCriterionOperation, thì việc nhóm các thao tác theo nhóm quảng cáo có thể hiệu quả hơn so với việc kết hợp các thao tác ảnh hưởng đến tiêu chí nhóm quảng cáo trong các nhóm quảng cáo khác nhau.

Tránh các vấn đề về đồng thời

  • Khi gửi nhiều công việc đồng thời cho cùng một tài khoản, hãy cố gắng giảm khả năng các công việc hoạt động trên cùng một đối tượng cùng một lúc, trong khi vẫn duy trì kích thước công việc lớn. Nhiều công việc chưa hoàn tất có trạng thái là RUNNING cố gắng thay đổi cùng một tập hợp đối tượng, điều này có thể dẫn đến các điều kiện giống như tắc nghẽn, dẫn đến tình trạng chậm nghiêm trọng và thậm chí là công việc không thành công.

  • Đừng gửi nhiều thao tác thay đổi cùng một đối tượng trong cùng một công việc, vì kết quả có thể không lường trước được.

Truy xuất kết quả một cách tối ưu

  • Đừng thăm dò trạng thái công việc quá thường xuyên, nếu không bạn có thể gặp lỗi giới hạn tốc độ.

  • Không truy xuất nhiều hơn 1.000 kết quả trên mỗi trang. Máy chủ có thể trả về ít hơn số lượng đó do tải hoặc các yếu tố khác.

  • Thứ tự kết quả sẽ giống với thứ tự tải lên.

Hướng dẫn sử dụng bổ sung

  • Bạn có thể đặt giới hạn trên cho thời gian chạy của một công việc hàng loạt trước khi bị huỷ. Khi tạo một công việc hàng loạt mới, hãy đặt trường metadata.execution_limit_seconds thành giới hạn thời gian mà bạn muốn (tính bằng giây). Không có giới hạn thời gian mặc định nếu bạn không đặt metadata.execution_limit_seconds.

  • Bạn không nên thêm nhiều hơn 1.000 thao tác cho mỗi AddBatchJobOperationsRequest và sử dụng sequence_token để tải các thao tác còn lại lên cùng một công việc. Tuỳ thuộc vào nội dung của các thao tác, việc có quá nhiều thao tác trong một AddBatchJobOperationsRequest có thể gây ra lỗi REQUEST_TOO_LARGE. Bạn có thể xử lý lỗi này bằng cách giảm số lượng thao tác và thử lại AddBatchJobOperationsRequest.

Các điểm hạn chế

  • Mỗi BatchJob hỗ trợ tối đa một triệu thao tác.

  • Mỗi tài khoản có thể có tối đa 100 công việc đang hoạt động hoặc đang chờ xử lý cùng một lúc.

  • Các công việc đang chờ xử lý quá 7 ngày sẽ tự động bị xoá.

  • Mỗi AddBatchJobOperationsRequest có kích thước tối đa là 10.484.504 byte. Nếu vượt quá giới hạn này, bạn sẽ nhận được một INTERNAL_ERROR. Bạn có thể xác định kích thước của yêu cầu trước khi gửi và thực hiện hành động thích hợp nếu yêu cầu quá lớn.

    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);