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

โปรดคำนึงถึงหลักเกณฑ์ต่อไปนี้เมื่อใช้ BatchJobService

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

  • เราต้องการงานขนาดใหญ่จำนวนน้อยมากกว่างานขนาดเล็กจำนวนมาก

  • จัดเรียงการดำเนินการที่อัปโหลดตามประเภทการดำเนินการ เช่น หากงานของคุณ มีการดำเนินการเพื่อเพิ่มแคมเปญ กลุ่มโฆษณา และเกณฑ์กลุ่มโฆษณา ให้จัดลำดับการดำเนินการในการอัปโหลดเพื่อให้การดำเนินการของแคมเปญทั้งหมดอยู่ก่อน ตามด้วยการดำเนินการของกลุ่มโฆษณาทั้งหมด และสุดท้ายคือการดำเนินการของเกณฑ์กลุ่มโฆษณาทั้งหมด

  • ในการดำเนินการประเภทเดียวกัน การจัดกลุ่มตามทรัพยากรหลักจะช่วยปรับปรุงประสิทธิภาพได้ ตัวอย่างเช่น หากคุณมีชุดออบเจ็กต์ AdGroupCriterionOperation การจัดกลุ่มการดำเนินการตามกลุ่มโฆษณาอาจมีประสิทธิภาพมากกว่าการผสมการดำเนินการที่มีผลต่อเกณฑ์กลุ่มโฆษณาในกลุ่มโฆษณาต่างๆ

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

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

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

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

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

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

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

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

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

เรียกข้อมูลผลลัพธ์อย่างเหมาะสม

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

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

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

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

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

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

ข้อจำกัด

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

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

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

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

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

    • หากไม่ได้ตั้งค่า page_size หรือตั้งค่าเป็น 0 ระบบจะใช้ค่าเริ่มต้นเป็น 1,000 ซึ่งเป็นค่าสูงสุด
    • หาก page_size เกิน 1,000 หรือน้อยกว่า 0 API จะแสดงข้อผิดพลาด INVALID_PAGE_SIZE
  • 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);