تقسيم ملفات الخلاصة إلى أجزاء

استنادًا إلى مخزونك، يمكن تقسيم الخلاصات (أو تقسيمها إلى عدة خلاصات ) قد تكون ضرورية.

حالات استخدام التقسيم إلى أجزاء

  • تتجاوز الخلاصة 200 ميغابايت لملف واحد (بعد ضغط gzip).

    • مثال: يبلغ حجم خلاصة مدى التوفّر التي تمّ إنشاؤها 1 غيغابايت. يجب أن يكون هذا إلى أكثر من 5 ملفات منفصلة (أو أجزاء).
  • يتم توزيع مستودع الشركاء على الأنظمة و/أو المناطق مما يؤدي إلى صعوبة في تسوية المستودع.

    • مثال: يمتلك الشريك مستودعًا إعلانيًا في الولايات المتحدة والاتحاد الأوروبي يقعان في مكان منفصل والأنظمة المختلفة. يمكن إنشاء الخلاصة باستخدام ملفَّين (أو أجزاء)، أحدهما للولايات المتحدة. وواحدة للاتحاد الأوروبي باستخدام نفس nonce generation_timestamp

قواعد عامة

  • لا يمكن أن يتجاوز كل جزء 200 ميغابايت لملف واحد (بعد ضغط gzip).
  • ننصحك باستخدام ما لا يزيد عن 20 جزءًا لكل خلاصة. إذا كان لديك مبرر عمل إذا كان المبلغ أكبر من هذا المبلغ، يُرجى التواصل مع فريق الدعم للحصول على تعليمات إضافية.
  • يجب إرسال السجلات الفردية (كائن Merchant واحد مثلاً) في جزء واحد، ولا يمكن تقسيمها على أجزاء متعددة. ومع ذلك، لا يلزم إرسالها في الجزء باستخدام shard_number نفسها للخلاصات المستقبلية
  • لتحقيق أداء أفضل، ينبغي تقسيم بياناتك بالتساوي بين الأجزاء بحيث تكون جميع الملفات المجزأة متشابهة في الحجم.

كيفية تقسيم الخلاصات

بالنسبة إلى كل ملف (أو جزء)، اضبط السمة FeedMetadata على التالي:

  • تم الضبط على processing_instruction PROCESS_AS_COMPLETE
  • تم ضبط shard_number على الجزء الحالي من الخلاصة. (بدءًا من 0 إلى total_shards - 1 بدون انقطاعات)
  • تم ضبط total_shards على إجمالي عدد الأجزاء في خلاصة (بدءًا من 1).
  • تم ضبط nonce على معرّف فريد نفسه. على كل أجزاء الخلاصة نفسها ولكن مختلفة عن قيمة خلاصات أخرى. يجب أن تكون قيمة nonce عددًا صحيحًا موجبًا (uint64).
  • generation_timestamp هو الطابع الزمني في نظامي Unix وEPOCH . ويجب أن تكون القيمة هي نفسها على مستوى كل أجزاء الخلاصة.

إجراء مقترَح: ضبط اسم الملف للإشارة إلى كل ملف (أو جزء) ونوع الخلاصة والطابع الزمني ورقم الجزء والعدد الإجمالي الأجزاء. يجب أن تكون الأجزاء متساوية تقريبًا في الحجم وأن تتم معالجتها مرة واحدة فيتم تحميل الأجزاء.

  • Example: “availability_feed_1574117613_001_of_002.json.gz”

مثال على خلاصة "مدى التوفّر المجزّأ"

الجزء 0

{
  "metadata": {
    "processing_instruction": "PROCESS_AS_COMPLETE",
    "shard_number": 0,
    "total_shards": 3,
    "nonce": 111111,
    "generation_timestamp": 1524606581
  },
  "service_availability": [
    {
      "availability": [
        {
          "spots_total": 1,
          "spots_open": 1,
          "duration_sec": 3600,
          "service_id": "1000",
          "start_sec": 1577275200,
          "merchant_id": "merchant1",
          "confirmation_mode": "CONFIRMATION_MODE_SYNCHRONOUS"
        }
      ]
    }
  ]
}

الجزء 1

{
  "metadata": {
    "processing_instruction": "PROCESS_AS_COMPLETE",
    "shard_number": 1,
    "total_shards": 3,
    "nonce": 111111,
    "generation_timestamp": 1524606581
  },
  "service_availability": [
    {
      "availability": [
        {
          "spots_total": 1,
          "spots_open": 1,
          "duration_sec": 3600,
          "service_id": "1000",
          "start_sec": 1577620800,
          "merchant_id": "merchant2",
          "confirmation_mode": "CONFIRMATION_MODE_SYNCHRONOUS"
        }
      ]
    }
  ]
}

الجزء 2

{
  "metadata": {
    "processing_instruction": "PROCESS_AS_COMPLETE",
    "shard_number": 2,
    "total_shards": 3,
    "nonce": 111111,
    "generation_timestamp": 1524606581
  },
  "service_availability": [
    {
      "availability": [
        {
          "spots_total": 1,
          "spots_open": 1,
          "duration_sec": 3600,
          "service_id": "1000",
          "start_sec": 1576670400,
          "merchant_id": "merchant3",
          "confirmation_mode": "CONFIRMATION_MODE_SYNCHRONOUS"
        }
      ]
    }
  ]
}

استخدام عملية التقسيم لمستودع الشركاء الموزَّع

قد يصعب على الشركاء دمج المستودع الموزَّع في أنظمة و/أو مناطق متعددة ضمن خلاصة واحدة يمكن أن يكون التقسيم إلى أجزاء تُستخدم لحل تحديات التسوية عن طريق وضع كل جزء ليتطابق مع كل جزء مجموعة مستودع النظام الموزع.

على سبيل المثال، لنفترض أنّ مستودع إعلانات الشريك مقسّم إلى منطقتَين (الولايات المتحدة والاتحاد الأوروبي). المخزون)، والذي يعيش في نظامين منفصلين.

يمكن للشريك تقسيم كل خلاصة إلى ملفَّين (أو أجزاء):

  • خلاصة التجّار: جزء واحد للولايات المتحدة وجزء واحد للاتحاد الأوروبي
  • خلاصة الخدمات: جزء واحد للولايات المتحدة وجزء واحد للاتحاد الأوروبي
  • خلاصة مدى التوفّر: جزء واحد للولايات المتحدة وجزء واحد للاتحاد الأوروبي

اتّبِع الخطوات التالية لضمان معالجة الخلاصات على النحو الصحيح:

  1. حدِّد جدولاً زمنيًا للتحميل، واضبط إعدادات كل حالة من المستودع الإعلاني على واتباع الجدول الزمني.
  2. عيّن أرقام أجزاء فريدة لكل مثيل (على سبيل المثال، الولايات المتحدة = N، الاتحاد الأوروبي = N + 1). اضبط total_shards على إجمالي عدد الأجزاء.
  3. في كل وقت تحميل مُجدوَل، اختَر "generation_timestamp" وnonce" في جلسة المعمل، FeedMetadata، ضبط جميع المثيلات على القيم نفسها لـ هذين الحقلين.
    • يجب أن تكون قيمة generation_timestamp حالية أو حديثة. (من الأفضل أن يكون الطابع الزمني لقاعدة بيانات القراءة الخاصة بالشريك)
  4. بعد تحميل جميع الأجزاء، تجمع Google الأجزاء عبر "generation_timestamp" وnonce"

سيعالج محرّك بحث Google الخلاصة كخلاصة واحدة على الرغم من أنّ كل جزء يمثّل منطقة مختلفة من مستودع الشريك ويمكن تحميلها على أي وقت مختلف من اليوم ما دامت السمة generation_timestamp هو نفسه عبر جميع الأجزاء.

مثال على خلاصة "مدى التوفّر المقسّم" حسب المنطقة

الجزء 0 - مستودع الولايات المتحدة

{
  "metadata": {
    "processing_instruction": "PROCESS_AS_COMPLETE",
    "shard_number": 0,
    "total_shards": 2,
    "nonce": 111111,
    "generation_timestamp": 1524606581
  },
  "service_availability": [
    {
      "availability": [
        {
          "spots_total": 1,
          "spots_open": 1,
          "duration_sec": 3600,
          "service_id": "1000",
          "start_sec": 1577275200,
          "merchant_id": "US_merchant_1",
          "confirmation_mode": "CONFIRMATION_MODE_SYNCHRONOUS"
        }
      ]
    }
  ]
}

الجزء 1 - مستودع الاتحاد الأوروبي

{
  "metadata": {
    "processing_instruction": "PROCESS_AS_COMPLETE",
    "shard_number": 1,
    "total_shards": 2,
    "nonce": 111111,
    "generation_timestamp": 1524606581
  },
  "service_availability": [
    {
      "availability": [
        {
          "spots_total": 1,
          "spots_open": 1,
          "duration_sec": 3600,
          "service_id": "1000",
          "start_sec": 1577620800,
          "merchant_id": "EU_merchant_1",
          "confirmation_mode": "CONFIRMATION_MODE_SYNCHRONOUS"
        }
      ]
    }
  ]
}