คุณอาจต้องใช้การแบ่งชาร์ด (หรือแบ่งฟีดออกเป็นหลายไฟล์) ทั้งนี้ขึ้นอยู่กับสินค้าคงคลัง
ควรใช้การแยกส่วนเมื่อใด
ฟีดมีขนาดเกิน 200 MB สำหรับ 1 ไฟล์ (หลังจากบีบอัด gzip)
- ตัวอย่าง: ฟีดความพร้อมที่สร้างขึ้นมีขนาด 1 GB โดยควร แบ่งออกเป็นไฟล์แยกกันอย่างน้อย 5 ไฟล์ (หรือที่เรียกว่า Shard)
พื้นที่โฆษณาของพาร์ทเนอร์กระจายอยู่ทั่วทั้งระบบและ/หรือภูมิภาค จึงทำให้การกระทบยอดพื้นที่โฆษณาเป็นเรื่องยาก
- ตัวอย่าง: พาร์ทเนอร์มีพื้นที่โฆษณาในสหรัฐอเมริกาและสหภาพยุโรปซึ่งอยู่ในระบบแยกกัน
ฟีดอาจสร้างขึ้นจาก 2 ไฟล์ (หรือ Shard) โดยไฟล์หนึ่งสำหรับสหรัฐอเมริกา
และอีกไฟล์หนึ่งสำหรับสหภาพยุโรปที่มี
nonceและgeneration_timestampเดียวกัน
- ตัวอย่าง: พาร์ทเนอร์มีพื้นที่โฆษณาในสหรัฐอเมริกาและสหภาพยุโรปซึ่งอยู่ในระบบแยกกัน
ฟีดอาจสร้างขึ้นจาก 2 ไฟล์ (หรือ Shard) โดยไฟล์หนึ่งสำหรับสหรัฐอเมริกา
และอีกไฟล์หนึ่งสำหรับสหภาพยุโรปที่มี
กฎทั่วไป
- แต่ละ Shard ต้องมีขนาดไม่เกิน 200 MB สำหรับ 1 ไฟล์ (หลังจากบีบอัดด้วย gzip)
- เราขอแนะนำให้ใช้ไม่เกิน 20 ชาร์ดต่อฟีด หากคุณมีเหตุผลทางธุรกิจที่ ต้องใช้มากกว่าจำนวนดังกล่าว โปรดติดต่อทีมสนับสนุนเพื่อขอคำแนะนำเพิ่มเติม
-
ต้องส่งระเบียนแต่ละรายการ (เช่น ออบเจ็กต์
Merchant1 รายการ) ใน Shard เดียว โดยจะแยกรายการดังกล่าวในหลาย Shard ไม่ได้ แต่ไม่จำเป็นต้องส่งใน Shard ที่มีshard_numberเดียวกันสำหรับฟีดในอนาคต - คุณควรแบ่งข้อมูลให้เท่าๆ กันในแต่ละ Shard เพื่อให้ไฟล์ที่ Shard ทั้งหมดมีขนาดใกล้เคียงกันเพื่อประสิทธิภาพที่ดีขึ้น
วิธีแบ่งฟีด
สำหรับแต่ละไฟล์ (หรือแต่ละ Shard) ให้ตั้งค่า FeedMetadata เป็นค่าต่อไปนี้
processing_instructionตั้งค่าเป็นPROCESS_AS_COMPLETEshard_numberตั้งค่าเป็น Shard ปัจจุบันของฟีด (เริ่มจาก 0 ถึงtotal_shards- 1 โดยไม่มีการหยุดชะงัก)total_shardsตั้งค่าเป็นจำนวน Shard ทั้งหมดสำหรับ ฟีด (เริ่มต้นจาก 1)nonceตั้งค่าเป็นตัวระบุที่ไม่ซ้ำกันซึ่งเหมือนกัน ในทุก Shard ของฟีดเดียวกัน แต่แตกต่างจากค่าของ ฟีดอื่นๆgeneration_timestampคือการประทับเวลาในรูปแบบ Unix และ EPOCH ค่านี้ควรเหมือนกันในทุก Shard ของฟีด
แนะนำ: สำหรับแต่ละไฟล์ (หรือแต่ละส่วน) ให้ตั้งชื่อไฟล์เพื่อระบุ ประเภทฟีด การประทับเวลา หมายเลขส่วน และจำนวนส่วนทั้งหมด Shards ควรมีขนาดเท่ากันโดยประมาณและจะได้รับการประมวลผลเมื่ออัปโหลด Shards ทั้งหมดแล้ว
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"
}
]
}
]
}การใช้ Sharding สำหรับพื้นที่โฆษณาที่พาร์ทเนอร์จัดจำหน่าย
การรวมพื้นที่โฆษณาที่กระจายอยู่ ในหลายระบบและ/หรือภูมิภาคไว้ในฟีดเดียวอาจเป็นเรื่องท้าทายสำหรับพาร์ทเนอร์ การแบ่งข้อมูลสามารถใช้เพื่อแก้ปัญหาความท้าทายในการกระทบยอดได้โดยการตั้งค่าแต่ละส่วนให้ตรงกับชุดพื้นที่โฆษณาของระบบแบบกระจายแต่ละระบบ
ตัวอย่างเช่น สมมติว่าพาร์ทเนอร์มีพื้นที่โฆษณาแยกเป็น 2 ภูมิภาค (พื้นที่โฆษณาในสหรัฐอเมริกาและสหภาพยุโรป) ซึ่งอยู่ใน 2 ระบบที่แยกกัน
พาร์ทเนอร์สามารถแบ่งแต่ละฟีดออกเป็น 2 ไฟล์ (หรือชาร์ด) ได้ดังนี้
- ฟีดผู้ขาย: 1 Shard สำหรับสหรัฐอเมริกา, 1 Shard สำหรับสหภาพยุโรป
- ฟีดบริการ: 1 ชาร์ดสำหรับสหรัฐอเมริกา 1 ชาร์ดสำหรับสหภาพยุโรป
- ฟีดความพร้อมจำหน่ายสินค้า: 1 ชาร์ดสำหรับสหรัฐอเมริกา 1 ชาร์ดสำหรับสหภาพยุโรป
ทำตามขั้นตอนด้านล่างเพื่อให้แน่ใจว่าระบบประมวลผลฟีดอย่างถูกต้อง
- กำหนดตารางเวลาการอัปโหลด และกำหนดค่าอินสแตนซ์สินค้าคงคลังแต่ละรายการให้ เป็นไปตามตารางเวลา
- กำหนดหมายเลข Shard ที่ไม่ซ้ำกันสำหรับแต่ละอินสแตนซ์ (เช่น สหรัฐอเมริกา = N, สหภาพยุโรป = N + 1)
ตั้งค่า
total_shardsเป็นจำนวน Shard ทั้งหมด - เมื่อถึงเวลาอัปโหลดที่กำหนดแต่ละครั้ง ให้เลือก
generation_timestampและnonceในFeedMetadataให้ตั้งค่าอินสแตนซ์ทั้งหมดให้มีค่าเดียวกันสำหรับ ฟิลด์ทั้ง 2 นี้generation_timestampควรเป็นวันที่ปัจจุบันหรือวันที่ผ่านมาล่าสุด (ในอุดมคติคือการประทับเวลาฐานข้อมูลที่อ่านของพาร์ทเนอร์)
- หลังจากอัปโหลด Shard ทั้งหมดแล้ว Google จะจัดกลุ่ม Shard ผ่าน
generation_timestampและnonce
Google จะประมวลผลฟีดเป็นฟีดเดียวแม้ว่าแต่ละ Shard จะแสดงถึง
สินค้าคงคลังของพาร์ทเนอร์ในภูมิภาคที่แตกต่างกัน และอาจอัปโหลดใน
ช่วงเวลาที่แตกต่างกันของวันตราบใดที่ generation_timestamp
เหมือนกันในทุก Shard
ตัวอย่างฟีดความพร้อมที่แยกส่วนตามภูมิภาค
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"
}
]
}
]
}