แนวทางปฏิบัติแนะนำและข้อจำกัด

พิจารณาหลักเกณฑ์ต่อไปนี้เมื่อใช้ BatchJobService

ปรับปรุงปริมาณงาน

ความเป็นหน่วยย่อยในการแยกงานแบบกลุ่ม

Google Ads API อาจแยกการดำเนินการในงานแบบกลุ่มที่ส่งเป็นชุดย่อยๆ ที่เล็กลงเพื่อทำการประมวลผล หากคุณไม่จัดกลุ่มการดำเนินการที่เกี่ยวข้อง เช่น การแก้ไขกลุ่มรายชื่อภายใน AssetGroup และ AdGroup ติดกันภายในงานแบบกลุ่ม Google Ads API อาจแยกการดำเนินการเหล่านี้ออกเป็นชุดย่อยต่างๆ การแยกนี้อาจทำให้การแก้ไขทั้งหมดล้มเหลวหรือทำให้บัญชีอยู่ในสถานะที่ไม่สอดคล้องกัน

การจัดกลุ่มเชิงตรรกะ

AssetGroupListingGroupFilterOperation จัดการกลุ่มรายชื่อภายใน AssetGroup ซึ่ง พบได้ทั่วไปในแคมเปญ Performance Max AdGroupCriterionOperation จัดการ กลุ่มรายชื่อภายใน AdGroup ซึ่งพบได้ทั่วไปใน แคมเปญ Shopping มาตรฐาน ทั้ง 2 อย่างใช้เพื่อกำหนดการกำหนดเป้าหมายผลิตภัณฑ์ หากคุณทำการเปลี่ยนแปลงที่ส่งผลต่อลำดับชั้นการกำหนดเป้าหมายผลิตภัณฑ์ในทั้ง 2 บริบท ให้จัดกลุ่มการดำเนินการเหล่านี้ติดกันในงานแบบกลุ่มเพื่อให้แน่ใจว่าระบบจะใช้การดำเนินการพร้อมกัน

ความสอดคล้องของข้อมูล

หากต้องการรักษาความสอดคล้องของข้อมูลและป้องกันการอัปเดตบางส่วน ให้เพิ่มการดำเนินการกลุ่มรายชื่อที่เกี่ยวข้องติดกันในงานแบบกลุ่ม การจัดลำดับนี้จะช่วยจัดกลุ่มการดำเนินการเป็นชุดย่อยๆ ที่เป็นหน่วยย่อยตามตรรกะการแยกงานแบบกลุ่มของ API ซึ่งจะป้องกันไม่ให้บัญชีอยู่ในสถานะที่ไม่สอดคล้องกัน

หลีกเลี่ยงปัญหาการทำงานพร้อมกัน

  • เมื่อส่งงานหลายรายการพร้อมกันสำหรับบัญชีเดียวกัน ให้พยายามลดโอกาสที่งานจะทำงานกับออบเจ็กต์เดียวกันในเวลาเดียวกัน ขณะเดียวกันก็รักษางานขนาดใหญ่ไว้ งานที่ยังไม่เสร็จจำนวนมากซึ่งมีสถานะเป็น RUNNING, พยายามที่จะเปลี่ยนแปลงชุดออบเจ็กต์เดียวกัน ซึ่งอาจนำไปสู่สภาวะที่คล้ายกับการติดตาย (Deadlock) ส่งผลให้เกิดการทำงานช้าลงอย่างมากและแม้กระทั่งงานล้มเหลว

  • อย่าส่งการดำเนินการหลายรายการที่เปลี่ยนแปลงออบเจ็กต์เดียวกันในงานเดียวกัน เนื่องจากผลลัพธ์อาจคาดเดาไม่ได้

ดึงข้อมูลผลลัพธ์อย่างเหมาะสม

  • อย่าสำรวจสถานะงานบ่อยเกินไป ไม่เช่นนั้นคุณอาจพบข้อผิดพลาดในการจำกัดอัตราคำขอ

  • อย่าดึงข้อมูลผลลัพธ์มากกว่า 1,000 รายการต่อหน้า เซิร์ฟเวอร์อาจแสดงผลลัพธ์น้อยกว่านั้นเนื่องจากโหลดหรือปัจจัยอื่นๆ

  • ลำดับผลลัพธ์จะเหมือนกับลำดับการอัปโหลด

คำแนะนำการใช้งานเพิ่มเติม

  • คุณสามารถกำหนดขอบเขตบนสำหรับระยะเวลาที่อนุญาตให้งานแบบกลุ่มทำงานก่อนที่จะถูกยกเลิก เมื่อสร้างงานแบบกลุ่มใหม่ ให้ตั้งค่า metadata.execution_limit_seconds เป็นขีดจำกัดเวลาที่ต้องการเป็นวินาที ไม่มีขีดจำกัดเวลาเริ่มต้นหากไม่ได้ตั้งค่า metadata.execution_limit_seconds

  • เราขอแนะนำให้เพิ่มการดำเนินการไม่เกิน 1,000 รายการต่อ AddBatchJobOperationsRequest และใช้ sequence_token เพื่ออัปโหลดการดำเนินการที่เหลือไปยังงานเดียวกัน การดำเนินการจำนวนมากเกินไปใน AddBatchJobOperationsRequest รายการเดียวอาจทำให้เกิดข้อผิดพลาด REQUEST_TOO_LARGE ทั้งนี้ขึ้นอยู่กับ เนื้อหาของการดำเนินการ คุณ สามารถจัดการข้อผิดพลาดนี้ได้โดยการลดจำนวนการดำเนินการและลองส่ง AddBatchJobOperationsRequestอีกครั้ง

ข้อจำกัด

  • แต่ละ BatchJob รองรับการดำเนินการได้สูงสุด 1 ล้านรายการ

  • แต่ละบัญชีจะมีงานที่ใช้งานอยู่หรือรอดำเนินการได้สูงสุด 100 งานพร้อมกัน

  • ระบบจะนำงานที่รอดำเนินการซึ่งมีอายุมากกว่า 7 วันออกโดยอัตโนมัติ

  • ตั้งแต่เวอร์ชัน v22 เป็นต้นไป คำขอ AddBatchJobOperations แต่ละรายการมีขีดจำกัดการดำเนินการเปลี่ยนแปลง 10,000 รายการต่อคำขอ

  • ตั้งแต่เวอร์ชัน v22 เป็นต้นไป สำหรับ page_size ช่องใน ListBatchJobResultsRequest

    • หากไม่ได้ตั้งค่า page_size หรือตั้งค่าเป็น 0 ระบบจะตั้งค่าเริ่มต้นเป็นค่าสูงสุดที่ 1,000
    • หาก page_size เกิน 1,000 หรือน้อยกว่า 0 API จะแสดงข้อผิดพลาด INVALID_PAGE_SIZE
  • ตั้งแต่เวอร์ชัน v23 เป็นต้นไป AddBatchJobOperationsRequest แต่ละรายการมีขนาดสูงสุด 41,937,920 ไบต์ หากคุณส่งคำขอที่มีขนาดเกินขีดจำกัดนี้ คุณจะได้รับ ข้อผิดพลาด INTERNAL_ERROR คุณสามารถตรวจสอบขนาดของคำขอก่อนส่งและดำเนินการที่เหมาะสมหากคำขอมีขนาดใหญ่เกินไป

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

ขนาดการดำเนินการเปลี่ยนแปลงรายการเดียว

แม้ว่าคำขอโดยรวมจะมีขนาดใหญ่กว่าได้ แต่ขนาดของการดำเนินการเปลี่ยนแปลงรายการเดียวภายในงานแบบกลุ่มจะจำกัดไว้ที่ 10,484,488 ไบต์ (ประมาณ 10.48 เมกะไบต์)