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

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

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

لضمان استقرار خوادمها، تقيّد واجهة برمجة التطبيقات مع "إعلانات Google" أنماط طلبات البحث GoogleAdsService.Search وGoogleAdsService.SearchStream التي تستهلك كميات كبيرة من موارد واجهة برمجة التطبيقات. في حال تم تقييد نمط طلب بحث معيّن، ستستمر الخدمات والطرق وأنماط طلبات البحث الأخرى في العمل بدون أي تأثير. يتم عرض الأخطاء التالية للطلبات التي تمّت فيها عملية تقييد:

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

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

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

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

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