ไฟล์ฟีดที่แบ่ง (เดิม)

คุณอาจต้องใช้การแบ่งชาร์ด (หรือแบ่งฟีดออกเป็นหลายไฟล์) ทั้งนี้ขึ้นอยู่กับสินค้าคงคลัง

ควรใช้การแยกส่วนเมื่อใด

  • ฟีดมีขนาดเกิน 200 MB สำหรับ 1 ไฟล์ (หลังจากบีบอัด gzip)

    • ตัวอย่าง: ฟีดความพร้อมที่สร้างขึ้นมีขนาด 1 GB โดยควร แบ่งออกเป็นไฟล์แยกกันอย่างน้อย 5 ไฟล์ (หรือที่เรียกว่า Shard)
  • พื้นที่โฆษณาของพาร์ทเนอร์กระจายอยู่ทั่วทั้งระบบและ/หรือภูมิภาค จึงทำให้การกระทบยอดพื้นที่โฆษณาเป็นเรื่องยาก

    • ตัวอย่าง: พาร์ทเนอร์มีพื้นที่โฆษณาในสหรัฐอเมริกาและสหภาพยุโรปซึ่งอยู่ในระบบแยกกัน ฟีดอาจสร้างขึ้นจาก 2 ไฟล์ (หรือ Shard) โดยไฟล์หนึ่งสำหรับสหรัฐอเมริกา และอีกไฟล์หนึ่งสำหรับสหภาพยุโรปที่มี nonce และ generation_timestamp เดียวกัน

กฎทั่วไป

  • แต่ละ Shard ต้องมีขนาดไม่เกิน 200 MB สำหรับ 1 ไฟล์ (หลังจากบีบอัดด้วย gzip)
  • เราขอแนะนำให้ใช้ไม่เกิน 20 ชาร์ดต่อฟีด หากคุณมีเหตุผลทางธุรกิจที่ ต้องใช้มากกว่าจำนวนดังกล่าว โปรดติดต่อทีมสนับสนุนเพื่อขอคำแนะนำเพิ่มเติม
  • ต้องส่งระเบียนแต่ละรายการ (เช่น ออบเจ็กต์ Merchant 1 รายการ) ใน Shard เดียว โดยจะแยกรายการดังกล่าวในหลาย Shard ไม่ได้ แต่ไม่จำเป็นต้องส่งใน Shard ที่มี shard_number เดียวกันสำหรับฟีดในอนาคต
  • คุณควรแบ่งข้อมูลให้เท่าๆ กันในแต่ละ Shard เพื่อให้ไฟล์ที่ Shard ทั้งหมดมีขนาดใกล้เคียงกันเพื่อประสิทธิภาพที่ดีขึ้น

วิธีแบ่งฟีด

สำหรับแต่ละไฟล์ (หรือแต่ละ Shard) ให้ตั้งค่า FeedMetadata เป็นค่าต่อไปนี้

  • processing_instructionตั้งค่าเป็น PROCESS_AS_COMPLETE
  • shard_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 ชาร์ดสำหรับสหภาพยุโรป

ทำตามขั้นตอนด้านล่างเพื่อให้แน่ใจว่าระบบประมวลผลฟีดอย่างถูกต้อง

  1. กำหนดตารางเวลาการอัปโหลด และกำหนดค่าอินสแตนซ์สินค้าคงคลังแต่ละรายการให้ เป็นไปตามตารางเวลา
  2. กำหนดหมายเลข Shard ที่ไม่ซ้ำกันสำหรับแต่ละอินสแตนซ์ (เช่น สหรัฐอเมริกา = N, สหภาพยุโรป = N + 1) ตั้งค่า total_shards เป็นจำนวน Shard ทั้งหมด
  3. เมื่อถึงเวลาอัปโหลดที่กำหนดแต่ละครั้ง ให้เลือก generation_timestamp และ nonce ใน FeedMetadata ให้ตั้งค่าอินสแตนซ์ทั้งหมดให้มีค่าเดียวกันสำหรับ ฟิลด์ทั้ง 2 นี้
    • generation_timestamp ควรเป็นวันที่ปัจจุบันหรือวันที่ผ่านมาล่าสุด (ในอุดมคติคือการประทับเวลาฐานข้อมูลที่อ่านของพาร์ทเนอร์)
  4. หลังจากอัปโหลด 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"
        }
      ]
    }
  ]
}