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
dangeneration_timestamp
.
- 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
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 denganshard_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_instruction
disetel kePROCESS_AS_COMPLETE
.shard_number
ditetapkan ke shard feed saat ini (mulai dari 0 hinggatotal_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:
- Tentukan jadwal upload, dan konfigurasikan setiap instance inventaris untuk mengikuti jadwal.
- Tetapkan nomor shard unik untuk setiap instance (misalnya US = N, EU = N + 1).
Tetapkan
total_shards
ke jumlah total shard. - Pada setiap waktu upload terjadwal, tentukan
generation_timestamp
dannonce
. Di kolomFeedMetadata
, 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)
- Setelah semua shard diupload, Google mengelompokkan shard melalui
generation_timestamp
dannonce
.
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" } ] } ] }