בהתאם למלאי שטחי הפרסום שלכם, יכול להיות שתצטרכו לפצל את הפידים לכמה קבצים.
מתי כדאי להשתמש בחלוקה לפלחים
הפיד גדול מ-200MB בקובץ אחד (אחרי דחיסת gzip).
- דוגמה: פיד הזמינות שנוצר הוא בנפח 1GB. צריך לחלק את הנתונים ל-5 קובצי משנה (או קטעים) נפרדים לפחות.
מלאי שטחי הפרסום של השותפים מחולק בין מערכות ו/או אזורים, וכתוצאה מכך קשה להתאים את מלאי שטחי הפרסום.
- דוגמה: לשותף יש מלאי שטחי פרסום בארה"ב ובאיחוד האירופי שנמצאים במערכות נפרדות. הפיד יכול להיווצר עם 2 קבצים (או פלחים), אחד לארה"ב ואחד לאיחוד האירופי, עם אותם
nonceו-generation_timestamp.
- דוגמה: לשותף יש מלאי שטחי פרסום בארה"ב ובאיחוד האירופי שנמצאים במערכות נפרדות. הפיד יכול להיווצר עם 2 קבצים (או פלחים), אחד לארה"ב ואחד לאיחוד האירופי, עם אותם
הנחיות כלליות
- כל שבר לא יכול לחרוג מ-200MB לקובץ אחד (אחרי דחיסת 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היא חותמת הזמן בפורמט יוניקס ו-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"
}
]
}
]
}שימוש בחלוקה לפלחים למלאי שטחי פרסום שמנוהל על ידי שותפים
יכול להיות שיהיו לשותפים קשיים לאחד מלאי שטחי הפרסום שמפוזר במספר מערכות או אזורים, בפיד אחד. אפשר להשתמש בחלוקה לקטעים כדי לפתור אתגרים של התאמה על ידי הגדרת כל מקטע כך שיתאים לקבוצת המלאי של כל מערכת מבוזרת.
לדוגמה, נניח שמלאי שטחי הפרסום של שותף מחולק לשני אזורים (מלאי שטחי פרסום בארה"ב וב-EU), שנמצאים בשתי מערכות נפרדות.
השותף יכול לפצל כל פיד לשני קבצים (או פלחים):
- פיד של מוֹכרים: 1 פלחי לארה"ב, 1 פלחי לאיחוד האירופי
- פיד שירותים: 1 פלחי לארה"ב, 1 פלחי לאיחוד האירופי
- פיד זמינות: 1 פלחי לארה"ב, 1 פלחי לאיחוד האירופי
כדי לוודא שהפידים מעובדים כראוי, יש לבצע את השלבים הבאים:
- קובעים לוח זמנים להעלאות ומגדירים כל מופע של מלאי שטחי הפרסום כך שיתאים ללוח הזמנים.
- מקצים מספרים ייחודיים של פלחים לכל מכונה (למשל: ארה"ב = N, האיחוד האירופי = N + 1).
מגדירים את
total_shardsלמספר הכולל של שברי המטא-נתונים. - בכל שעה מתוזמנת להעלאה, צריך להחליט על
generation_timestampו-nonce. בקטעFeedMetadata, מגדירים את כל המופעים כך שיכילו את אותם ערכים בשני השדות האלה.- השדה
generation_timestampצריך לכלול תאריך נוכחי או תאריך מהזמן האחרון (רצוי חותמת הזמן של השותף לקריאה במסד הנתונים)
- השדה
- אחרי העלאת כל השברים, 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"
}
]
}
]
}