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

إنّ إحدى الوظائف الأساسية للعديد من تطبيقات "إعلانات 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 دقائق على أنّه استخدام متوسط، في حين سيُحتسَب تنفيذ 3, 000 تقرير في 5 دقائق على أنّه استخدام مرتفع جدًا.

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

تخزين بياناتك مؤقتًا

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

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

نشرت "إعلانات 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. يتم تعديل جميع الأعمدة الأخرى بشكل غير متكرّر أو لا يتم تعديلها أبدًا، لذا من غير الفعّال جلبها كل ساعة. يمكنك تخزين هذه القيم في قاعدة بيانات محلية وتشغيل تقرير حدث التغيير أو حالة التغيير لتنزيل التغييرات مرة أو مرتين في اليوم.

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

حذف الحسابات غير المستخدَمة

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

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