File feed dengan sharding

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

Kapan harus menggunakan sharding

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

    • Contoh: Feed ketersediaan yang dihasilkan adalah 1 GB. Seharusnya, di-sharding menjadi lebih dari 5 file (atau shard) terpisah.
  • Inventaris partner didistribusikan di berbagai sistem dan/atau wilayah mengakibatkan kesulitan merekonsiliasi inventaris.

    • Contoh: Partner memiliki inventaris AS dan Uni Eropa yang berada di tempat terpisah yang berbeda. Feed dapat dibuat dengan 2 file (atau shard), 1 untuk Amerika Serikat, dan 1 untuk Uni Eropa dengan nonce dan generation_timestamp.

Peraturan umum

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

Cara melakukan sharding feed

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

  • processing_instructiondisetel 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 sharding feed yang sama tetapi berbeda dari nilai feed lainnya. nonce harus berupa int positif (uint64).
  • generation_timestamp adalah stempel waktu dalam unix dan EPOCH format font. Nilai ini harus sama di seluruh shard feed.

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

  • Example: “availability_feed_1574117613_001_of_002.json.gz”

Contoh feed Ketersediaan yang Di-sharding

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

Mungkin akan sulit bagi partner untuk menggabungkan inventaris yang didistribusikan di beberapa sistem dan/atau region ke dalam satu feed. {i>Sharding<i} dapat berupa digunakan untuk menyelesaikan tantangan rekonsiliasi dengan menetapkan setiap shard agar sesuai dengan masing-masing inventaris yang ada di sistem terdistribusi.

Misalnya, inventaris partner dipisahkan menjadi 2 wilayah (Amerika Serikat dan Uni Eropa inventaris), yang ada dalam 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 ini 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 terjadwal, tentukan generation_timestamp dan nonce. Di kolom FeedMetadata, tetapkan semua instance agar memiliki nilai yang sama untuk kedua {i>field<i} ini.
    • generation_timestamp harus tanggal saat ini atau baru-baru ini (idealnya, stempel waktu baca di database partner)
  4. Setelah semua shard diupload, Google mengelompokkan shard melalui generation_timestamp dan nonce.

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

Contoh feed Ketersediaan yang Dibagi berdasarkan 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 UE

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