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

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

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

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

إصدار واجهة برمجة التطبيقات رمز الخطأ
<= الإصدار 16 QuotaError.RESOURCE_EXHAUSTED
الإصدار 17 من نظام التشغيل >= 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 3,000
طويلة المدى (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. يتم تحديث جميع الأعمدة الأخرى نادرًا أو لا يتم تحديثها على الإطلاق، لذلك ليس من الفعّال للغاية جلبها كل ساعة. يمكنك تخزين هذه القيم في قاعدة بيانات محلية وتشغيل تقرير حدث التغيير أو حالة التغيير لتنزيل التغييرات مرة أو مرّتين يوميًا.

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

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

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

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