จัดการข้อมูลอย่างมีประสิทธิภาพ

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

ทำความเข้าใจนโยบายการใช้งานทรัพยากรของ Google สำหรับรายงาน

Google Ads API จะควบคุม GoogleAdsService.Search และ GoogleAdsService.SearchStream รูปแบบการค้นหาที่ใช้ทรัพยากร API มากเกินไป เพื่อให้มั่นใจว่าเซิร์ฟเวอร์จะมีความเสถียร หากมีการจำกัดรูปแบบการค้นหาหนึ่งๆ บริการ เมธอด และรูปแบบการค้นหาอื่นๆ จะยังคงทำงานต่อไปโดยไม่ได้รับผลกระทบ ระบบจะแสดงข้อผิดพลาดต่อไปนี้สำหรับคำขอที่ถูกจำกัด

รหัสข้อผิดพลาด
QuotaError.EXCESSIVE_SHORT_TERM_QUERY_RESOURCE_CONSUMPTION หรือ QuotaError.EXCESSIVE_LONG_TERM_QUERY_RESOURCE_CONSUMPTION ขึ้นอยู่กับ ระยะเวลาของการใช้งานทรัพยากรสูง

หากพบข้อผิดพลาดเหล่านี้ ให้รอ 5 นาทีก่อนลองส่งคำขอที่ล้มเหลวด้วย QuotaError.EXCESSIVE_SHORT_TERM_QUERY_RESOURCE_CONSUMPTION อีกครั้ง และรอ 30 นาทีก่อนลองส่งคำขอที่ล้มเหลวด้วย QuotaError.EXCESSIVE_LONG_TERM_QUERY_RESOURCE_CONSUMPTION อีกครั้ง

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

วิธีการ ฟิลด์ค่าใช้จ่าย
GoogleAdsService.Search SearchGoogleAdsResponse.query_resource_consumption
GoogleAdsService.SearchStream SearchGoogleAdsStreamResponse.query_resource_consumption

เมตริกต้นทุนที่ฟิลด์เหล่านี้แสดงจะขึ้นอยู่กับปัจจัยต่างๆ เช่น

  • ขนาดบัญชี
  • มุมมองและคอลัมน์ที่คุณดึงข้อมูลในรายงาน
  • ภาระงานในเซิร์ฟเวอร์ Google Ads API

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

กรอบเวลา ค่าเฉลี่ย (เปอร์เซ็นไทล์ที่ 50) P70 (ค่อนข้างสูง) P95 (สูงมาก)
ระยะสั้น (5 นาที) 6000 30000 1800000
ระยะยาว (24 ชั่วโมง) 16000 90000 8400000

ตัวอย่างเช่น สมมติว่าคุณเรียกใช้รูปแบบการค้นหาดังต่อไปนี้ ซึ่งใช้ทรัพยากร 600 หน่วยต่อรายงาน

SELECT campaign.id, campaign.name, metrics.cost_micros FROM campaign WHERE
    segments.date = "YYYY-MM-DD"

คุณเรียกใช้คําค้นหานี้สําหรับบัญชีลูกค้าหลายบัญชีในวันที่ต่างๆ โดยแก้ไขคําค้นหาเพื่อแทนที่ค่าต่างๆ สําหรับตัวกรอง segments.date ตารางต่อไปนี้แสดงจำนวนรายงานที่คุณเรียกใช้ได้ในกรอบเวลาที่กำหนด เพื่อให้การใช้ทรัพยากรของคุณอยู่ในกลุ่มการใช้ทรัพยากรต่างๆ

กรอบเวลา เฉยๆ ค่อนข้างสูง สูงมาก
ระยะสั้น (5 นาที) 10 50 3000
ระยะยาว (24 ชั่วโมง) 26 150 14000

การเรียกใช้รูปแบบการค้นหานี้ 10 ครั้งใน 5 นาทีจะถือเป็นการใช้งานโดยเฉลี่ย ในขณะที่การเรียกใช้รายงาน 3, 000 รายการใน 5 นาทีจะถือเป็นการใช้งานสูงมาก

มีกลยุทธ์หลายอย่างในการเพิ่มประสิทธิภาพการใช้ทรัพยากรของรายงาน ส่วนที่เหลือของคู่มือนี้จะครอบคลุมกลยุทธ์บางส่วนเหล่านี้

แคชข้อมูล

คุณควรแคชรายละเอียดเอนทิตีที่ดึงมาจากเซิร์ฟเวอร์ API ไว้ในฐานข้อมูลในเครื่องแทนที่จะเรียกใช้เซิร์ฟเวอร์ทุกครั้งที่ต้องการข้อมูล โดยเฉพาะอย่างยิ่งสำหรับเอนทิตีที่มีการเข้าถึงบ่อยหรือมีการเปลี่ยนแปลงไม่บ่อย ใช้ change-event และ change-status เมื่อเป็นไปได้เพื่อตรวจหาออบเจ็กต์ที่มีการเปลี่ยนแปลงนับตั้งแต่ที่คุณซิงค์ผลลัพธ์ครั้งล่าสุด

เพิ่มประสิทธิภาพความถี่ในการเรียกใช้รายงาน

Google Ads ได้เผยแพร่หลักเกณฑ์เกี่ยวกับความใหม่ของข้อมูลและความถี่ในการอัปเดตข้อมูล คุณควรใช้คำแนะนำนี้เพื่อกำหนดความถี่ในการดึงข้อมูลรายงาน

หากคุณต้องอัปเดตบัญชีเป็นประจำ เราขอแนะนำให้จำกัดจำนวนบัญชีดังกล่าวไว้เพียงไม่กี่บัญชี เช่น เฉพาะบัญชี Google Ads 20 อันดับแรก ส่วนที่เหลือสามารถอัปเดตได้ในความถี่ที่ต่ำกว่า เช่น วันละครั้งหรือ 2 ครั้ง

เพิ่มประสิทธิภาพขนาดของรายงาน

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

ตัวอย่างเช่น ลองดูโค้ดต่อไปนี้ที่ดึงสถิติสำหรับกลุ่มโฆษณาที่เฉพาะเจาะจง และอัปเดตตารางฐานข้อมูลสถิติ

  List<long> adGroupIds = FetchAdGroupIdsFromLocalDatabase();

  foreach (long adGroupId in adGroupIds)
  {
    string query = "SELECT ad_group.id, ad_group.name, metrics.clicks, " +
        "metrics.cost_micros, metrics.impressions, segments.date FROM " +
        "ad_group WHERE segments.date DURING LAST_7_DAYS AND " +
        "ad_group.id = ${adGroupId}";
    List<GoogleAdsRow> rows = RunGoogleAdsReport(customerId, query);
    InsertRowsIntoStatsTable(adGroupId, rows);
  }

รหัสนี้ใช้ได้ดีในบัญชีทดสอบขนาดเล็ก อย่างไรก็ตาม Google Ads รองรับกลุ่มโฆษณาได้สูงสุด 20,000 กลุ่มต่อแคมเปญ และแคมเปญ 10,000 แคมเปญต่อบัญชี ดังนั้นหากโค้ดนี้ ทํางานกับบัญชี Google Ads ขนาดใหญ่ อาจทําให้เซิร์ฟเวอร์ Google Ads API ทํางานหนักเกินไป ซึ่งจะนําไปสู่การจํากัดอัตราและการควบคุมปริมาณ

แนวทางที่ดีกว่าคือการเรียกใช้รายงานเดียวและประมวลผลในเครื่อง เราจะแสดงแนวทางหนึ่งที่ใช้แมปในหน่วยความจำ

  Hashset<long> adGroupIds = FetchAdGroupIdsFromLocalDatabase();

  string query = "SELECT ad_group.id, ad_group.name, metrics.clicks, " +
      "metrics.cost_micros, metrics.impressions, segments.date FROM " +
      "ad_group WHERE segments.date DURING LAST_7_DAYS";
  List<GoogleAdsRow> rows = RunGoogleAdsReport(customer_id, query);

  var memoryMap = new Dictionary<long, List<GoogleAdsRow>>();
  for each (GoogleAdsRow row in rows)
  {
    var adGroupId = row.AdGroup.Id;

    if (adGroupIds.Contains(adGroupId))
    {
      CheckAndAddRowIntoMemoryMap(row, adGroupId, memoryMap);
    }
  }
  foreach (long adGroupId in memoryMap.Keys())
  {
    InsertRowsIntoStatsTable(adGroupId, rows);
  }

ซึ่งจะช่วยลดภาระงานในเซิร์ฟเวอร์ Google Ads API เนื่องจากมีการเรียกใช้รายงานน้อยลง

หากพบว่ารายงานมีขนาดใหญ่เกินกว่าจะเก็บไว้ในหน่วยความจำ คุณสามารถแบ่งคำค้นหาออกเป็นกลุ่มเล็กลงได้โดยเพิ่มLIMITไว้ดังนี้

SELECT
  ad_group.id,
  ad_group.name,
  metrics.clicks,
  metrics.cost_micros,
  metrics.impressions,
  segments.date
FROM ad_group
WHERE segments.date DURING LAST_7_DAYS
  AND ad_group.id IN (id1, id2, ...)
LIMIT 100000

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

เพิ่มประสิทธิภาพสิ่งที่ดึงข้อมูล

เมื่อเรียกใช้รายงาน คุณควรคำนึงถึงคอลัมน์ที่คุณรวมไว้ในคำค้นหา ลองดูตัวอย่างต่อไปนี้ซึ่งกำหนดเวลาให้ทำงานทุกชั่วโมง

SELECT
  customer.id,
  customer.currency_code,
  campaign.id,
  campaign.name,
  ad_group.id,
  ad_group.name,
  ad_group_criterion.keyword.match_type,
  ad_group_criterion.keyword.text,
  ad_group_criterion.criterion_id,
  ad_group_criterion.quality_info.creative_quality_score,
  ad_group_criterion.system_serving_status,
  ad_group_criterion.negative,
  ad_group_criterion.quality_info.quality_score,
  ad_group_criterion.quality_info.search_predicted_ctr,
  ad_group_criterion.quality_info.post_click_quality_score,
  metrics.historical_landing_page_quality_score,
  metrics.search_click_share,
  metrics.historical_creative_quality_score,
  metrics.clicks,
  metrics.impressions
FROM keyword_view
WHERE segments.date DURING LAST_7_DAYS

คอลัมน์เดียวที่มีแนวโน้มว่าจะเปลี่ยนแปลงทุกชั่วโมงคือ metrics.clicks และ metrics.impressions คอลัมน์อื่นๆ ทั้งหมดจะได้รับการอัปเดตไม่บ่อยนักหรือไม่อัปเดตเลย ดังนั้นการดึงข้อมูลทุกชั่วโมงจึงไม่มีประสิทธิภาพอย่างยิ่ง คุณจัดเก็บค่าเหล่านี้ในฐานข้อมูลในเครื่องและเรียกใช้รายงานเหตุการณ์การเปลี่ยนแปลงหรือสถานะการเปลี่ยนแปลงเพื่อดาวน์โหลดการเปลี่ยนแปลงวันละ 1-2 ครั้งได้

ในบางกรณี คุณสามารถลดจำนวนแถวที่ดาวน์โหลดได้โดยใช้ ตัวกรองที่เหมาะสม

ล้างบัญชีที่ไม่ได้ใช้

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

  • เพิกถอนการให้สิทธิ์ที่ลูกค้าให้แอปพลิเคชันของคุณเพื่อจัดการ บัญชีของลูกค้า
  • หยุดการเรียก API ไปยังบัญชี Google Ads ของลูกค้า ซึ่งใช้ได้กับงานออฟไลน์โดยเฉพาะ เช่น งาน Cron และไปป์ไลน์ข้อมูลที่ออกแบบมาให้ทำงานโดยไม่ต้องมีการแทรกแซงจากผู้ใช้
  • หากลูกค้าเพิกถอนการให้สิทธิ์ แอปพลิเคชันของคุณควรจัดการสถานการณ์อย่างเหมาะสมและหลีกเลี่ยงการส่งการเรียก API ที่ไม่ถูกต้องไปยังเซิร์ฟเวอร์ API ของ Google
  • หากลูกค้ายกเลิกบัญชี Google Ads แล้ว คุณควรตรวจหา บัญชีดังกล่าวและหลีกเลี่ยงการส่งการเรียก API ที่ไม่ถูกต้องไปยังเซิร์ฟเวอร์ API ของ Google
  • ลบข้อมูลที่คุณดาวน์โหลดจากบัญชี Google Ads ของลูกค้าออกจากฐานข้อมูลในเครื่องหลังจากผ่านไประยะเวลาที่เหมาะสม