إدارة البيانات بكفاءة

من بين الوظائف الأساسية للعديد من تطبيقات "إعلانات Google" استرداد بيانات الحساب لاستخدامها حالات مثل تحليل البيانات واستعلامات العملاء وعمليات التحقق من الامتثال للسياسات. أثناء جلب البيانات، يجب تحسين الاستخدام حتى لا تفرط في التحميل. خوادم Google أو مخاطر التعرض لمخاطر محددة. لمزيد من التفاصيل، يمكنك الاطلاع على الأدلة حول تحديد المعدل والحفاظ على عنوان البريد الإلكتروني المُحدَّث للتواصل معك:

فهم سياسة استخدام موارد Google لإعداد التقارير

لضمان استقرار خوادمها، تحظر Google Ads API GoogleAdsService.Search و GoogleAdsService.SearchStream أنماط طلبات بحث تستهلك قدرًا كبيرًا كميات موارد واجهة برمجة التطبيقات. إذا تم تقييد نمط استعلام معين، والخدمات والأساليب وأنماط طلبات البحث التي ستستمر في العمل بدون أي تغيير. تشير رسالة الأشكال البيانية يتم حدوث الأخطاء التالية للطلبات الخاضعة لقيود:

إصدار واجهة برمجة التطبيقات رمز الخطأ
الإصدار 17 أو أقل QuotaError.RESOURCE_EXHAUSTED
الإصدار 18 أو أكثر QuotaError.EXCESSIVE_SHORT_TERM_QUERY_RESOURCE_CONSUMPTION أو QuotaError.EXCESSIVE_LONG_TERM_QUERY_RESOURCE_CONSUMPTION حسب على مدار مدة الاستخدام المرتفع للموارد.

لمساعدتك في تحديد ومراقبة التقارير المُكلفة، سنقوم أيضًا بإرجاع مقياس التكلفة للتقارير الفردية.

الطريقة حقل التكلفة
GoogleAdsService.Search SearchGoogleAdsResponse.query_resource_consumption
GoogleAdsService.SearchStream SearchGoogleAdsStreamResponse.query_resource_consumption

يعتمد مقياس التكلفة الذي تعرضه هذه الحقول على عوامل مختلفة مثل

  • حجم حساباتك
  • طرق العرض والأعمدة التي تجلبها في تقاريرك
  • التحميل على خوادم Google Ads API:

لمساعدتك في تتبع طلبات البحث ذات التكلفة العالية، ننشر أخبارًا مجمّعة أولية إحصاءات حول استهلاك الموارد لأنماط طلبات البحث المختلفة التي نراها في خوادمنا. سننشر دوريًا أرقامًا محدَّثة لمساعدتك على إجراء ذلك استعلاماتك.

الفترة الزمنية المتوسط (p50). 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 دقائق كمتوسط استخدامًا، بينما يُعد تشغيل 3000 تقرير في 5 دقائق استخدامًا مرتفعًا للغاية.

هناك العديد من الاستراتيجيات لتحسين استهلاك موارد التقارير. يتناول باقي هذا الدليل بعض هذه الاستراتيجيات.

تخزين البيانات في ذاكرة التخزين المؤقت

يجب التخزين المؤقت لتفاصيل الكيان التي تجلبها من خوادم واجهة برمجة التطبيقات بتنسيق محلي بدلاً من استدعاء الخادم في كل مرة تحتاج فيها إلى البيانات، لا سيما للكيانات التي يتم الوصول إليها بشكل متكرر أو التي تتغير بشكل غير متكرر. استخدِم change-event وchange-status حيث من الممكن اكتشاف الكائنات التي تغيرت منذ آخر مزامنة للنتائج.

تحسين معدّل تكرار إعداد التقارير

وضعت "إعلانات Google" إرشادات منشورة بشأن حداثة البيانات وكيفية بشكل متكرر يتم تحديث البيانات. يجب عليك استخدام هذه الإرشادات لتحديد كيفية بشكل متكرر لجلب التقارير.

إذا كنت بحاجة إلى تحديث الحسابات بشكل منتظم، ننصحك بالحدّ من عدد هذه الحسابات إلى مجموعة صغيرة، على سبيل المثال، أعلى عشرين حساب "إعلانات Google" فقط الحسابات. ويمكن تعديل باقي الشرائح بمعدّل تكرار أقل، مثلاً مرة واحدة أو مرتين في اليوم.

تحسين حجم تقاريرك

يجب أن يجلب التطبيق دفعات كبيرة من البيانات بدلاً من تشغيل حزمة عدد التقارير الصغيرة. أحد العوامل التي تؤثر في هذا الخيار هو حساب .

على سبيل المثال، يمكنك استخدام الرمز التالي الذي يسحب إحصاءات إعلان محدد تحديث جدول قاعدة بيانات الإحصائيات:

  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" حتى 20,000 مجموعة إعلانية لكل حملة و10,000 حملة لكل حساب. لذلك إذا كانت هذه التعليمة البرمجية حساب كبير في "إعلانات Google"، فقد يؤدي ذلك إلى تحميل عبء زائد على خوادم 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 يتم تحديث جميع الأعمدة الأخرى بشكل غير متكرر أو لا يتم لذلك، ليس من الفعّال للغاية جلبها كل ساعة. يمكنك تخزين هذه في قاعدة بيانات محلية وتنفيذ حدث تغيير أو تقرير change-status لتنزيل التغييرات مرة أو مرتين في اليوم.

في بعض الحالات، يمكنك تقليل عدد الصفوف التي تُنزِّلها عن طريق تطبيق عوامل التصفية المناسبة.

إخلاء مساحة تخزين غير مُستخدَمة

إذا كان تطبيقك يدير حسابات معلِنين تابعة لجهات خارجية، عليك: تطوير التطبيق مع وضع انسحاب العملاء في الاعتبار. يجب عليك بشكل دوري وتنظيف عملياتك ومخازن البيانات لإزالة الحسابات للعملاء الذين لا استخدام تطبيقك لفترة أطول. عند تنظيف حسابات "إعلانات Google" غير المستخدمة، يُرجى الاحتفاظ مع وضع الإرشادات التالية في الاعتبار:

  • إلغاء التفويض الذي منحه العميل تطبيقك لإدارته حساباتهم.
  • إيقاف إجراء طلبات البيانات من واجهة برمجة التطبيقات إلى حسابات العميل على "إعلانات Google" ينطبق ذلك. خاصة للوظائف غير المتصلة بالإنترنت مثل وظائف cron ومسارات البيانات التي مصممة للعمل دون تدخل المستخدم.
  • إذا أبطل العميل التفويض، يجب أن تعامل مع هذا الموقف بسلاسة وتجنب إرسال طلبات البيانات من واجهة برمجة التطبيقات غير الصالحة إلى خوادم واجهة برمجة التطبيقات من Google.
  • إذا ألغى العميل حسابه على "إعلانات Google"، عليك اكتشاف وتجنَّب إرسال طلبات البيانات من واجهة برمجة التطبيقات غير الصالحة إلى خوادم واجهات برمجة التطبيقات من Google.
  • احذف البيانات التي نزَّلتها من حسابات العملاء على "إعلانات Google" من بقاعدة البيانات المحلية بعد فترة زمنية مناسبة.