Bergantung pada inventaris Anda, sharding (atau membagi feed menjadi beberapa file) mungkin diperlukan.
Kapan harus menggunakan sharding
Feed melebihi 200 MB untuk 1 file (setelah kompresi gzip).
- Contoh: Feed ketersediaan yang dibuat adalah 1 GB. Data ini harus di-shard ke 5+ file (atau shard) terpisah.
Inventaris partner didistribusikan di berbagai sistem dan/atau wilayah sehingga sulit untuk mencocokkan inventaris.
- Contoh: Partner memiliki inventaris Amerika Serikat dan Uni Eropa yang aktif di sistem terpisah. Feed dapat dibuat dengan 2 file (atau shard), 1 untuk Amerika Serikat,
dan 1 untuk Uni Eropa dengan
noncedangeneration_timestampyang sama.
- Contoh: Partner memiliki inventaris Amerika Serikat dan Uni Eropa yang aktif di sistem terpisah. 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 jangan gunakan lebih dari 20 shard per feed. Jika Anda memiliki justifikasi bisnis yang memerlukan jumlah lebih dari itu, hubungi dukungan untuk mendapatkan petunjuk lebih lanjut.
-
Setiap catatan (misalnya, satu objek
Merchant) harus dikirim dalam satu shard, catatan tersebut tidak dapat dibagi di beberapa shard. Namun, iklan ini tidak harus dikirim dalam shard denganshard_numberyang 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 serupa.
Cara melakukan sharding feed
Untuk setiap file (atau shard), tetapkan FeedMetadata ke
berikut:
processing_instructiondisetel kePROCESS_AS_COMPLETE.shard_numberditetapkan ke shard feed saat ini (mulai dari 0 hinggatotal_shards- 1 tanpa diskontinuitas)total_shardsditetapkan ke jumlah total shard untuk feed (dimulai dari 1).nonceditetapkan ke ID unik yang sama di semua shard dari feed yang sama, tetapi berbeda dari nilai feed lainnya.generation_timestampadalah stempel waktu dalam format unix dan EPOCH. Nilai 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 memiliki ukuran yang hampir sama dan diproses setelah semua shard diupload.
Example:“availability_feed_1574117613_001_of_002.json.gz”
Contoh feed Ketersediaan yang di-shard
Shard 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"
}
]
}
]
}Shard 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"
}
]
}
]
}Shard 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 terdistribusi partner
Partner mungkin kesulitan menggabungkan inventaris yang didistribusikan di beberapa sistem dan/atau wilayah ke dalam satu feed. Sharding dapat digunakan untuk mengatasi tantangan rekonsiliasi dengan menyetel setiap shard agar cocok dengan setiap kumpulan inventaris 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 Amerika Serikat, 1 shard untuk Uni Eropa
- Feed ketersediaan: 1 shard untuk Amerika Serikat, 1 shard untuk Uni Eropa
Ikuti langkah-langkah di bawah ini untuk memastikan feed diproses dengan benar:
- Tentukan jadwal upload, dan konfigurasi setiap instance inventaris untuk mengikuti jadwal.
- Tetapkan nomor shard unik untuk setiap instance (misalnya, AS = N, Uni Eropa = N + 1).
Tetapkan
total_shardske jumlah total shard. - Pada setiap waktu upload terjadwal, tentukan
generation_timestampdannonce. DiFeedMetadata, tetapkan semua instance untuk menyimpan nilai yang sama untuk kedua kolom ini.generation_timestampharus berupa tanggal saat ini atau masa lalu baru-baru ini (sebaiknya, stempel waktu database baca di partner)
- Setelah semua shard diupload, Google mengelompokkan shard melalui
generation_timestampdannonce.
Google akan memproses feed sebagai satu feed meskipun setiap bagian mewakili
wilayah inventaris partner yang berbeda dan dapat diupload pada
waktu yang berbeda dalam sehari selama generation_timestamp
sama di semua bagian.
Contoh feed Ketersediaan yang di-shard menurut wilayah
Shard 0 - US Inventory
{
"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"
}
]
}
]
}