Praktik Terbaik dan Batasan

Pertimbangkan panduan berikut saat menggunakan BatchJobService.

Meningkatkan throughput

  • Lebih baik memiliki lebih sedikit tugas yang lebih besar daripada banyak tugas yang lebih kecil.

  • Mengurutkan operasi yang diupload menurut jenis operasi. Misalnya, jika tugas Anda berisi operasi untuk menambahkan kampanye, grup iklan, dan kriteria grup iklan, urutkan operasi dalam upload Anda sehingga semua operasi kampanye dilakukan terlebih dahulu, diikuti dengan semua operasi grup iklan, dan terakhir semua operasi kriteria grup iklan.

  • Dalam operasi dengan jenis yang sama, pengelompokan menurut resource induk dapat meningkatkan performa. Misalnya, jika Anda memiliki serangkaian objek AdGroupCriterionOperation, akan lebih efisien untuk mengelompokkan operasi menurut grup iklan, daripada mencampuradukkan operasi yang memengaruhi kriteria grup iklan di grup iklan yang berbeda.

Atomisitas dalam pemisahan batch

Google Ads API dapat membagi operasi dalam tugas batch yang dikirimkan menjadi sub-batch yang lebih kecil untuk diproses. Jika Anda tidak mengelompokkan operasi terkait, seperti modifikasi grup listingan dalam AssetGroup dan AdGroup, secara berurutan dalam tugas batch, Google Ads API mungkin membagi operasi ini menjadi sub-batch yang berbeda. Pemisahan ini dapat menyebabkan seluruh modifikasi gagal, atau membuat akun dalam keadaan tidak konsisten.

Pengelompokan logis

AssetGroupListingGroupFilterOperation mengelola grup listingan dalam AssetGroup, yang umum dalam kampanye Performa Maksimal. AdGroupCriterionOperation mengelola grup listingan dalam AdGroup, yang umum dalam kampanye Shopping standar. Keduanya digunakan untuk menentukan penargetan produk. Jika Anda membuat perubahan yang memengaruhi hierarki penargetan produk di kedua konteks, kelompokkan operasi ini secara berurutan dalam tugas batch untuk memastikan operasi tersebut diterapkan bersama-sama.

Konsistensi data

Untuk menjaga konsistensi data dan mencegah update sebagian, tambahkan operasi grup listingan terkait secara berurutan ke tugas batch Anda. Pengurutan ini membantu mengelompokkannya ke dalam sub-batch atomik berdasarkan logika pemisahan batch API, yang mencegah akun Anda berada dalam status yang tidak konsisten.

Menghindari masalah konkurensi

  • Saat mengirimkan beberapa tugas serentak untuk akun yang sama, coba kurangi kemungkinan tugas beroperasi pada objek yang sama pada saat yang sama, sambil mempertahankan ukuran tugas yang besar. Banyak tugas yang belum selesai, yang memiliki status RUNNING, mencoba memutasi kumpulan objek yang sama, yang dapat menyebabkan kondisi seperti kebuntuan yang mengakibatkan perlambatan parah dan bahkan kegagalan tugas.

  • Jangan mengirimkan beberapa operasi yang mengubah objek yang sama dalam tugas yang sama, karena hasilnya tidak dapat diprediksi.

Mengambil hasil secara optimal

  • Jangan melakukan polling status tugas terlalu sering atau Anda berisiko mengalami error pembatasan kapasitas.

  • Jangan mengambil lebih dari 1.000 hasil per halaman. Server dapat menampilkan lebih sedikit dari itu karena beban atau faktor lain.

  • Urutan hasil akan sama dengan urutan upload.

Panduan penggunaan tambahan

  • Anda dapat menetapkan batas atas durasi tugas batch diizinkan berjalan sebelum dibatalkan. Saat membuat tugas batch baru, tetapkan kolom metadata.execution_limit_seconds ke batas waktu pilihan Anda, dalam detik. Tidak ada batas waktu default jika metadata.execution_limit_seconds tidak ditetapkan.

  • Sebaiknya tambahkan tidak lebih dari 1.000 operasi per AddBatchJobOperationsRequest dan gunakan sequence_token untuk mengupload operasi lainnya ke tugas yang sama. Bergantung pada konten operasi, terlalu banyak operasi dalam satu AddBatchJobOperationsRequest dapat menyebabkan error REQUEST_TOO_LARGE. Anda dapat menangani error ini dengan mengurangi jumlah operasi dan mencoba lagi AddBatchJobOperationsRequest.

Batasan

  • Setiap BatchJob mendukung hingga satu juta operasi.

  • Setiap akun dapat memiliki hingga 100 tugas aktif atau tertunda secara bersamaan.

  • Tugas tertunda yang sudah lebih dari 7 hari akan otomatis dihapus.

  • Mulai v22, setiap permintaan AddBatchJobOperations memiliki batas 10.000 operasi perubahan per permintaan.

  • Mulai v22, untuk kolom page_size di ListBatchJobResultsRequest:

    • Jika page_size tidak disetel atau 0, nilai defaultnya adalah maksimum 1.000.
    • Jika page_size melebihi 1.000, atau kurang dari 0, API akan menampilkan error INVALID_PAGE_SIZE.
  • Setiap AddBatchJobOperationsRequest memiliki ukuran maksimum 10.484.504 byte. Jika melebihi batas ini, Anda akan menerima INTERNAL_ERROR. Anda dapat menentukan ukuran permintaan sebelum mengirimkan dan mengambil tindakan yang sesuai jika terlalu besar.

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