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

Hãy cân nhắc các nguyên tắc sau khi sử dụng BatchJobService.

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

  • Bạn nên sử dụng í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 quá trình tải lên sao cho tất cả các thao tác chiến dịch đều được thực hiện trước, tiếp theo là tất cả cá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 sẽ hiệu quả hơn so với việc trộn lẫn 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.

Tính nguyên tử trong việc chia lô

Google Ads API có thể chia các thao tác trong một công việc theo lô đã gửi thành các lô con nhỏ hơn để xử lý. Nếu bạn không nhóm các thao tác có liên quan (chẳng hạn như các sửa đổi nhóm trang thông tin trong một AssetGroup và một AdGroup) liên tiếp trong một công việc theo lô, thì Google Ads API có thể chia các thao tác này thành các lô con khác nhau. Việc tách biệt này có thể dẫn đến việc toàn bộ sửa đổi không thành công hoặc khiến tài khoản ở trạng thái không nhất quán.

Nhóm logic

AssetGroupListingGroupFilterOperation quản lý các nhóm trang thông tin trong một AssetGroup, thường thấy trong chiến dịch Tối đa hoá hiệu suất. AdGroupCriterionOperation quản lý các nhóm trang thông tin trong một AdGroup, thường thấy trong chiến dịch Mua sắm tiêu chuẩn. Cả hai đều được dùng để xác định tính năng nhắm mục tiêu theo sản phẩm. Nếu bạn thực hiện các thay đổi ảnh hưởng đến hệ phân cấp tính năng nhắm mục tiêu theo sản phẩm trên cả hai bối cảnh, hãy nhóm các thao tác này liên tiếp trong công việc theo lô để đảm bảo các thao tác này được áp dụng cùng nhau.

Tính nhất quán của dữ liệu

Để duy trì tính nhất quán của dữ liệu và ngăn chặn các bản cập nhật một phần, hãy thêm các thao tác nhóm trang thông tin có liên quan liên tiếp vào công việc theo lô. Việc sắp xếp này giúp nhóm các thao tác thành các lô con nguyên tử theo logic chia lô của API, giúp ngăn tài khoản của bạn ở trạng thái không nhất quán.

Tránh các vấn đề về tính đồ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, đồng thời 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 RUNNING, cố gắng thay đổi cùng một tập hợp đối tượng, có thể dẫn đến tình trạng tắc nghẽn, gây ra tình trạng chậm nghiêm trọng và thậm chí là lỗi công việc.

  • Khô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 dự đoán được.

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

  • Không kiểm tra 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 về hạn mức.

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

  • Thứ tự kết quả sẽ giống như 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 theo lô trước khi bị huỷ. Khi tạo một công việc theo lô mới, hãy đặt trường metadata.execution_limit_seconds thành giới hạn thời gian 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 nên thêm không quá 1.000 thao tác cho mỗi AddBatchJobOperationsRequest và sử dụng sequence_token để tải phần còn lại của các thao tác 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, 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 1 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á.

  • Kể từ phiên bản 22, mỗi yêu cầu AddBatchJobOperations có giới hạn là 10.000 thao tác thay đổi trên mỗi yêu cầu.

  • Kể từ phiên bản 22, đối với trường page_size trong ListBatchJobResultsRequest:

    • Nếu page_size không được đặt hoặc đặt là 0, thì giá trị mặc định sẽ là tối đa 1.000.
    • Nếu page_size vượt quá 1.000 hoặc nhỏ hơn 0, thì API sẽ trả về lỗi INVALID_PAGE_SIZE .
  • Kể từ phiên bản 23, mỗi AddBatchJobOperationsRequest có kích thước tối đa là 41.937.920 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 kích thước quá lớn.

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

Kích thước thao tác thay đổi đơn lẻ

Mặc dù yêu cầu tổng thể có thể lớn hơn, nhưng kích thước của một thao tác thay đổi đơn lẻ trong lô bị giới hạn ở mức 10.484.488 byte (khoảng 10,48 MB).