ملفات الخلاصة المجزّأة (الإصدار القديم)

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

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

  • تتجاوز الخلاصة 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"
        }
      ]
    }
  ]
}

Shard 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"
        }
      ]
    }
  ]
}