פיצול של קובצי פיד

בהתאם למלאי שלכם, פילוח (או פיצול של פידים לכמה פידים) ) ייתכן שיהיה צורך בכך.

מתי להשתמש בפיצול

  • הפיד גדול מ-200MB עבור קובץ אחד (לאחר דחיסת נתונים מסוג gzip).

    • דוגמה: פיד הזמינות שנוצר הוא 1GB. זה צריך להיות מפוצל ל-5 קבצים נפרדים (או פיצולים).
  • מלאי שטחי הפרסום של השותפים מחולק בין מערכות או אזורים שונים ולכן קשה יותר להתאים את המלאי.

    • לדוגמה: לשותף יש מלאי בארה"ב ובאיחוד האירופי המערכות שלנו. ייתכן שהפיד ייווצר עם 2 קבצים (או פיצולים), אחד מהם לארה"ב, ו-1 לאיחוד האירופי עם אותם nonce ו- generation_timestamp.

הנחיות כלליות

  • כל פיצול לא יכול לחרוג מ- 200 MB לקובץ אחד (לאחר דחיסת נתונים מסוג 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"
        }
      ]
    }
  ]
}

שימוש בפילוח למלאי שמבוזר על ידי שותפים

לשותפים יכול להיות קשה לאחד את מלאי שטחי הפרסום שמבוזר בכמה מערכות או אזורים בפיד אחד. הפיצול יכול להיות שמשמש לפתרון אתגרי התאמה על ידי הגדרת ההתאמה של כל פיצול מערכת המלאי של המערכת המבוזרת.

למשל, נניח שהמלאי של שותף מחולק ל-2 אזורים (ארה"ב והאיחוד האירופי). מלאי), שמתקיימים בשתי מערכות נפרדות.

השותף יכול לחלק כל פיד לשני קבצים (או פיצולים):

  • פיד מוכרים: פיצול אחד לארה"ב, פיצול אחד לאיחוד האירופי
  • פיד שירותים: פיצול אחד לארה"ב, פיצול אחד לאיחוד האירופי
  • פיד זמינות: פיצול אחד לארה"ב, פיצול אחד לאיחוד האירופי

כדי לוודא שהפידים מעובדים כראוי:

  1. קובעים לוח זמנים להעלאה ומגדירים כל מופע של מלאי שטחי הפרסום לעמוד בלוח הזמנים.
  2. צריך להקצות מספרים מפוצלים ייחודיים לכל מכונה (למשל: ארה"ב = N, האיחוד האירופי = N + 1). הגדרת total_shards למספר המפוצלים הכולל.
  3. בכל זמן העלאה מתוזמן, בוחרים generation_timestamp וגם nonce ב FeedMetadata, הגדרת כל המופעים כך שיהיו בהם ערכים זהים עבור בשני השדות האלה.
    • הערך של generation_timestamp צריך להיות נוכחי או שחל בעבר (אידיאלית, חותמת הזמן של מסד הנתונים להרשאת קריאה של השותף)
  4. לאחר העלאת כל הפיצולים, Google מקבצת את המפוצלים באמצעות generation_timestamp וגם nonce

Google תעבד את הפיד בתור פיד, למרות שכל פיצול מייצג אזור אחר במלאי של השותף, ואפשר להעלות אותו בשעה שונה ביום, כל עוד generation_timestamp זהה בכל הפיצולים.

דוגמה של פיד זמינות מחולקת לפי אזור

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

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