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 dihasilkan adalah 1 GB. Bagian ini harus di-sharding ke 5+ file (atau shard) terpisah.
Inventaris partner didistribusikan di seluruh sistem dan/atau wilayah yang mengakibatkan kesulitan dalam merekonsiliasi inventaris.
- Contoh: Partner memiliki inventaris Amerika Serikat 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
dangeneration_timestamp
yang sama.
- Contoh: Partner memiliki inventaris Amerika Serikat 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
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.
-
Masing-masing data (misalnya satu objek
Merchant
) harus dikirim dalam satu shard, dan tidak dapat dibagi di beberapa shard. Namun, nilai tersebut tidak harus dikirim dalam shard denganshard_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 serupa.
Cara melakukan sharding feed
Untuk setiap file (atau shard), tetapkan FeedMetadata
ke
berikut:
processing_instruction
disetel kePROCESS_AS_COMPLETE
.shard_number
ditetapkan ke sharding feed saat ini (mulai dari 0 hinggatotal_shards
- 1 tanpa diskon)total_shards
ditetapkan ke jumlah total shard untuk feed (mulai dari 1).nonce
ditetapkan ke ID unik yang sama di semua shard feed yang sama tetapi berbeda dari nilai feed lainnya.generation_timestamp
adalah stempel waktu dalam format unix dan EPOCH. Bagian 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 diproses setelah semua shard diupload.
Example:
“availability_feed_1574117613_001_of_002.json.gz”
Contoh feed Ketersediaan yang Di-sharding
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 yang didistribusikan partner
Partner akan kesulitan untuk menggabungkan inventaris yang didistribusikan di beberapa sistem dan atau region menjadi satu feed. Sharding dapat digunakan untuk menyelesaikan tantangan rekonsiliasi dengan menetapkan setiap shard agar sesuai dengan kumpulan inventaris sistem terdistribusi.
Misalnya, inventaris partner dipisahkan menjadi 2 wilayah (inventaris AS dan Uni Eropa), yang terdapat dalam 2 sistem terpisah.
Partner dapat membagi setiap feed menjadi 2 file (atau shard):
- Feed penjual: 1 shard untuk Amerika Serikat, 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 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).
Setel
total_shards
ke jumlah total shard. - Pada setiap waktu upload terjadwal, tentukan
generation_timestamp
dannonce
. PadaFeedMetadata
, tetapkan semua instance agar memiliki nilai yang sama untuk kedua kolom ini.generation_timestamp
harus merupakan data saat ini atau baru-baru ini (idealnya, stempel waktu database yang telah dibaca partner)
- Setelah semua shard diupload, Google akan mengelompokkan shard melalui
generation_timestamp
dannonce
.
Google akan memproses feed sebagai feed meskipun setiap shard mewakili wilayah inventaris partner yang berbeda dan dapat diupload pada waktu yang berbeda selama generation_timestamp
sama di semua shard.
Contoh feed Ketersediaan yang Di-sharding 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" } ] } ] }