File feed dengan sharding

Bergantung pada inventaris Anda, sharding (atau membagi feed menjadi beberapa file) mungkin diperlukan.

Kapan sharding digunakan

  • Feed melebihi 200 MB untuk 1 file (setelah kompresi gzip).

    • Contoh: Feed ketersediaan yang dihasilkan adalah 1 GB. Ini harus di-sharding ke lebih dari 5 file (atau shard) terpisah.
  • Inventaris partner didistribusikan di berbagai sistem dan/atau wilayah, sehingga menyulitkan rekonsiliasi inventaris.

    • Contoh: Partner memiliki inventaris AS dan Uni Eropa yang berada dalam sistem terpisah. Feed dapat dibuat dengan 2 file (atau shard), 1 untuk AS, dan 1 untuk Uni Eropa dengan nonce dan generation_timestamp yang sama.

Peraturan umum

  • Setiap shard tidak boleh melebihi 200 MB untuk 1 file (setelah kompresi gzip).
  • Sebaiknya jangan gunakan lebih dari 20 shard per feed. Jika Anda memiliki justifikasi bisnis yang memerlukan lebih dari jumlah tersebut, harap hubungi dukungan untuk mendapatkan petunjuk lebih lanjut.
  • Tiap-tiap record (misalnya, satu objek Merchant) harus dikirim dalam satu shard, serta tidak dapat dibagi menjadi beberapa shard. Namun, ID ini tidak harus dikirim dalam shard dengan shard_number yang sama untuk feed mendatang.
  • Untuk mendapatkan performa yang lebih baik, data Anda harus dibagi secara merata di antara shard sehingga semua file yang di-sharding memiliki ukuran yang sama.

Cara melakukan sharding feed

Untuk setiap file (atau shard), tetapkan FeedMetadata ke hal berikut:

  • processing_instruction ditetapkan ke PROCESS_AS_COMPLETE.
  • shard_number ditetapkan ke shard feed saat ini (mulai dari 0 hingga total_shards - 1 tanpa diskon)
  • total_shards ditetapkan ke jumlah total shard untuk feed (dimulai dari 1).
  • nonce ditetapkan ke ID unik yang sama di semua shard dari feed yang sama, tetapi berbeda dari nilai feed lainnya.
  • generation_timestamp adalah stempel waktu dalam format unix dan EPOCH. ID ini harus sama di semua shard feed.

Direkomendasikan: Untuk setiap file (atau shard), tetapkan nama file untuk menunjukkan jenis feed, stempel waktu, nomor shard, dan jumlah total shard. Shard harus berukuran kurang lebih sama dan akan diproses setelah semua shard diupload.

  • Example: “availability_feed_1574117613_001_of_002.json.gz”

Contoh feed Ketersediaan shard

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

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

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

Menggunakan sharding untuk inventaris yang didistribusikan oleh partner

Partner dapat kesulitan menggabungkan inventaris yang didistribusikan di beberapa sistem dan/atau wilayah menjadi satu feed. Sharding dapat digunakan untuk menyelesaikan tantangan rekonsiliasi dengan menetapkan setiap shard agar cocok dengan kumpulan inventaris dari setiap sistem terdistribusi.

Misalnya, inventaris partner dibagi menjadi 2 wilayah (inventaris AS dan Uni Eropa), yang berada di 2 sistem terpisah.

Partner dapat membagi setiap feed menjadi 2 file (atau shard):

  • Feed penjual: 1 shard untuk AS, 1 shard untuk Uni Eropa
  • Feed layanan: 1 shard untuk AS, 1 shard untuk Uni Eropa
  • Feed ketersediaan: 1 shard untuk AS, 1 shard untuk Uni Eropa

Ikuti langkah-langkah di bawah untuk memastikan feed diproses dengan benar:

  1. Tentukan jadwal upload, dan konfigurasikan setiap instance inventaris untuk mengikuti jadwal.
  2. Tetapkan nomor shard unik untuk setiap instance (misalnya, US = N, EU = N + 1). Tetapkan total_shards ke jumlah total shard.
  3. Pada setiap waktu upload yang dijadwalkan, tentukan generation_timestamp dan nonce. Pada FeedMetadata, tetapkan semua instance agar memiliki nilai yang sama untuk kedua kolom ini.
    • generation_timestamp harus merupakan yang terbaru atau baru-baru ini (idealnya, stempel waktu baca di database partner)
  4. Setelah semua shard diupload, Google akan mengelompokkan shard melalui generation_timestamp dan nonce.

Google akan memproses feed sebagai satu meskipun setiap shard mewakili wilayah yang berbeda dari inventaris partner dan dapat diupload pada waktu yang berbeda selama generation_timestamp sama di semua shard.

Contoh feed Ketersediaan shard menurut wilayah

Shard 0 - Inventaris AS

{
  "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 - Inventaris Uni Eropa

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