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