Phân đoạn tệp nguồn cấp dữ liệu

Tuỳ thuộc vào khoảng không quảng cáo, bạn có thể cần phải phân đoạn (hoặc chia nguồn cấp dữ liệu thành nhiều tệp).

Trường hợp sử dụng tính năng phân đoạn

  • Nguồn cấp dữ liệu vượt quá 200 MB cho 1 tệp (sau khi nén gzip).

    • Ví dụ: Nguồn cấp dữ liệu về tình trạng còn hàng đã tạo có kích thước 1 GB. Bạn nên phân đoạn tệp này thành 5 tệp riêng biệt trở lên (hoặc mảnh).
  • Khoảng không quảng cáo của đối tác được phân phối trên nhiều hệ thống và/hoặc khu vực, dẫn đến việc khó đối chiếu khoảng không quảng cáo.

    • Ví dụ: Đối tác có khoảng không quảng cáo ở Hoa Kỳ và Liên minh Châu Âu nằm trong các hệ thống riêng biệt. Nguồn cấp dữ liệu có thể được tạo bằng 2 tệp (hoặc mảnh), 1 cho Hoa Kỳ và 1 cho Liên minh Châu Âu với cùng một noncegeneration_timestamp.

Quy tắc chung

  • Mỗi mảnh không được vượt quá 200 MB cho 1 tệp (sau khi nén gzip).
  • Bạn không nên tạo quá 20 phân mảnh cho mỗi nguồn cấp dữ liệu. Nếu bạn có lý do kinh doanh cần nhiều hơn số tiền đó, vui lòng liên hệ với nhóm hỗ trợ để được hướng dẫn thêm.
  • Bạn phải gửi từng bản ghi (ví dụ: một đối tượng Merchant) trong một phân mảnh, không thể chia các bản ghi đó thành nhiều phân mảnh. Tuy nhiên, bạn không nhất thiết phải gửi các yêu cầu này trong phân đoạn bằng cùng một shard_number cho các nguồn cấp dữ liệu trong tương lai.
  • Để có hiệu suất tốt hơn, dữ liệu của bạn phải được phân chia đều giữa các phân mảnh để tất cả các tệp được phân mảnh có kích thước tương tự nhau.

Cách phân đoạn nguồn cấp dữ liệu

Đối với mỗi tệp (hoặc mảnh), hãy đặt FeedMetadata thành như sau:

  • processing_instructionđược đặt thành PROCESS_AS_COMPLETE.
  • shard_number được đặt thành phân đoạn hiện tại của nguồn cấp dữ liệu (bắt đầu từ 0 đến total_shards – 1 mà không có giá trị gián đoạn)
  • total_shards được đặt thành tổng số mảnh cho nguồn cấp dữ liệu (bắt đầu từ 1).
  • nonce được đặt thành một giá trị nhận dạng duy nhất giống nhau trên tất cả các mảnh của cùng một nguồn cấp dữ liệu nhưng khác với giá trị của các nguồn cấp dữ liệu khác. nonce phải là số nguyên dương (uint64).
  • generation_timestamp là dấu thời gian ở định dạng Unix và EPOCH. Giá trị này phải giống nhau trên tất cả các mảnh của nguồn cấp dữ liệu.

Đề xuất: Đối với mỗi tệp (hoặc phân đoạn), hãy đặt tên tệp để cho biết loại nguồn cấp dữ liệu, dấu thời gian, số phân đoạn và tổng số phân đoạn. Các mảnh phải có kích thước gần bằng nhau và được xử lý sau khi tất cả các mảnh được tải lên.

  • Example: “availability_feed_1574117613_001_of_002.json.gz”

Ví dụ về nguồn cấp dữ liệu Phạm vi cung cấp được phân đoạn

Mảnh 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"
        }
      ]
    }
  ]
}

Mảnh 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"
        }
      ]
    }
  ]
}

Mảnh 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"
        }
      ]
    }
  ]
}

Sử dụng tính năng phân đoạn cho khoảng không quảng cáo do đối tác phân phối

Đối tác có thể gặp khó khăn khi hợp nhất khoảng không quảng cáo được phân phối trên nhiều hệ thống và/hoặc khu vực vào một nguồn cấp dữ liệu. Bạn có thể sử dụng tính năng phân đoạn để giải quyết các thách thức đối với việc điều chỉnh bằng cách thiết lập từng phân đoạn sao cho khớp với từng nhóm khoảng không quảng cáo của hệ thống phân phối.

Ví dụ: giả sử kho hàng của một đối tác được chia thành 2 khu vực (kho hàng ở Hoa Kỳ và kho hàng ở Liên minh Châu Âu), nằm trong 2 hệ thống riêng biệt.

Đối tác có thể chia mỗi nguồn cấp dữ liệu thành 2 tệp (hoặc phân đoạn):

  • Nguồn cấp dữ liệu người bán: 1 phân mảnh cho Hoa Kỳ, 1 phân mảnh cho Liên minh Châu Âu
  • Nguồn cấp dữ liệu dịch vụ: 1 phân mảnh cho Hoa Kỳ, 1 phân mảnh cho Liên minh Châu Âu
  • Nguồn cấp dữ liệu về tình trạng còn hàng: 1 phân mảnh cho Hoa Kỳ, 1 phân mảnh cho Liên minh Châu Âu

Hãy làm theo các bước bên dưới để đảm bảo nguồn cấp dữ liệu được xử lý đúng cách:

  1. Quyết định lịch tải lên và định cấu hình từng phiên bản khoảng không quảng cáo để tuân theo lịch đó.
  2. Chỉ định số phân đoạn duy nhất cho mỗi thực thể (ví dụ: Hoa Kỳ = N, Liên minh Châu Âu = N + 1). Đặt total_shards thành tổng số mảnh.
  3. Tại mỗi thời điểm tải lên theo lịch, hãy quyết định một generation_timestampnonce. Trong FeedMetadata, hãy đặt tất cả các thực thể để giữ cùng một giá trị cho hai trường này.
    • generation_timestamp phải là hiện tại hoặc gần đây (tốt nhất là dấu thời gian đọc trong cơ sở dữ liệu của đối tác)
  4. Sau khi tất cả các mảnh được tải lên, Google sẽ nhóm các mảnh thông qua generation_timestampnonce.

Google sẽ xử lý nguồn cấp dữ liệu dưới dạng một nguồn cấp dữ liệu mặc dù mỗi phân đoạn đại diện cho một khu vực khác nhau trong khoảng không quảng cáo của đối tác và có thể được tải lên vào một thời điểm khác nhau trong ngày, miễn là generation_timestamp giống nhau trên tất cả các phân đoạn.

Ví dụ về nguồn cấp dữ liệu Tình trạng còn hàng được phân đoạn theo khu vực

Mảnh 0 – Khoảng không quảng cáo ở Hoa Kỳ

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

Mảnh 1 – Khoảng không quảng cáo ở Liên minh Châu Âu

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