جارٍ تجزئة ملفات الخلاصة

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

حالات استخدام التقسيم

  • تتجاوز الخلاصة 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 على معرّف فريد هو نفسه في جميع أجزاء الخلاصة نفسها، ولكنه يختلف عن قيمة الخلاصات الأخرى.
  • 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. خصِّص أرقام الأجزاء الفريدة لكل مثيل (مثل US = 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"
        }
      ]
    }
  ]
}