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

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

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

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