आपकी इन्वेंट्री के आधार पर, फ़ीड को शार्डिंग या कई फ़ाइलों में बांटना ज़रूरी हो सकता है.
शार्डिंग का इस्तेमाल कब करना चाहिए
1 फ़ाइल के लिए फ़ीड का आकार 200 MB से ज़्यादा है (gzip संपीड़न के बाद).
- उदाहरण: जनरेट किया गया उपलब्धता फ़ीड एक जीबी है. इसे पांच से ज़्यादा अलग-अलग फ़ाइलों या शार्ड में शार्ड किया जाना चाहिए.
पार्टनर की इन्वेंट्री को सिस्टम और/या इलाकों के बीच बांटा जाता है. इस वजह से, इन्वेंट्री का मिलान करने में मुश्किल होती है.
- उदाहरण: पार्टनर के पास अमेरिका और ईयू (यूरोपीय संघ) की इन्वेंट्री है, जो अलग-अलग सिस्टम में
रहती है. फ़ीड को दो फ़ाइलों (या शार्ड), अमेरिका के लिए एक, और ईयू के लिए एक ही
nonce
औरgeneration_timestamp
के साथ जनरेट किया जा सकता है.
- उदाहरण: पार्टनर के पास अमेरिका और ईयू (यूरोपीय संघ) की इन्वेंट्री है, जो अलग-अलग सिस्टम में
रहती है. फ़ीड को दो फ़ाइलों (या शार्ड), अमेरिका के लिए एक, और ईयू के लिए एक ही
सामान्य नियम
- 1 फ़ाइल (gzip संपीड़न के बाद) के लिए प्रत्येक शार्ड का 200 MB से अधिक नहीं हो सकता.
- हम हर फ़ीड में 20 से ज़्यादा शार्ड न इस्तेमाल करने का सुझाव देते हैं. अगर आपके कारोबार के लिए यह वजह है कि आपको इससे ज़्यादा रकम की ज़रूरत है, तो ज़्यादा निर्देश पाने के लिए कृपया सहायता टीम से संपर्क करें.
-
अलग-अलग रिकॉर्ड (उदाहरण के लिए, एक
Merchant
ऑब्जेक्ट) को एक शार्ड में भेजा जाना चाहिए, उन्हें एक से ज़्यादा शार्ड में नहीं बांटा जा सकता. हालांकि, उन्हें भविष्य के फ़ीड के लिए उसीshard_number
के साथ शार्ड में भेजने की ज़रूरत नहीं है. - बेहतर परफ़ॉर्मेंस के लिए, अपने डेटा को शार्ड के बीच में बराबर बांट दें, ताकि सभी शार्ड फ़ाइलों का साइज़ एक जैसा हो.
फ़ीड को शार्ड करने का तरीका
हर फ़ाइल (या शार्ड) के लिए, FeedMetadata
को
यहां सेट करें:
processing_instruction
PROCESS_AS_COMPLETE
पर सेट करें.shard_number
को फ़ीड के मौजूदा शार्ड पर सेट किया गया (0 सेtotal_shards
से लेकर 1 तक, बिना किसी रुकावट के)total_shards
को फ़ीड के लिए शार्ड की कुल संख्या पर सेट किया गया है (1 से शुरू).nonce
को ऐसे यूनीक आइडेंटिफ़ायर पर सेट किया गया है जो एक ही फ़ीड के सभी शार्ड में एक जैसा है, लेकिन वह अन्य फ़ीड की वैल्यू से अलग है.generation_timestamp
, unix और EPOCH फ़ॉर्मैट में टाइमस्टैंप होता है. फ़ीड के सभी शार्ड में यह एक जैसा होना चाहिए.
इसका सुझाव दिया जाता है: हर फ़ाइल (या शार्ड) के लिए, फ़ाइल नाम को इस तरह सेट करें जिससे फ़ीड टाइप, टाइमस्टैंप, शार्ड नंबर, और शार्ड की कुल संख्या बताई जा सके. शार्ड का साइज़ करीब-करीब बराबर होना चाहिए. सभी शार्ड अपलोड हो जाने के बाद, इन्हें प्रोसेस कर दिया जाता है.
Example:
“availability_feed_1574117613_001_of_002.json.gz”
खरीदारी के लिए उपलब्धता फ़ीड का उदाहरण
शार्ड 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" } ] } ] }
शार्ड 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" } ] } ] }
शार्ड 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" } ] } ] }
पार्टनर की ओर से दी गई इन्वेंट्री के लिए शार्डिंग का इस्तेमाल करना
कई सिस्टम और इलाकों में बांटी गई इन्वेंट्री को एक ही फ़ीड में इकट्ठा करना, पार्टनर के लिए मुश्किल हो सकता है. शार्ड करने की सुविधा का इस्तेमाल, मिलान से जुड़ी चुनौतियों को हल करने के लिए किया जा सकता है. इसके लिए, हर शार्ड को हर डिस्ट्रिब्यूटेड सिस्टम के इन्वेंट्री सेट से मेल खाने पर सेट किया जा सकता है.
उदाहरण के लिए, मान लें कि किसी पार्टनर की इन्वेंट्री को दो क्षेत्रों (अमेरिका और ईयू की इन्वेंट्री) में बांटा गया है, जो दो अलग-अलग सिस्टम में मौजूद हैं.
पार्टनर हर फ़ीड को दो फ़ाइलों (या शार्ड) में बांट सकता है:
- व्यापारी फ़ीड: अमेरिका के लिए 1 शार्ड, यूरोपीय संघ के लिए 1 शार्ड
- सेवा फ़ीड: अमेरिका के लिए 1 शार्ड, यूरोपीय संघ के लिए 1 शार्ड
- उपलब्धता फ़ीड: अमेरिका के लिए 1 शार्ड, यूरोपीय संघ के लिए 1 शार्ड
फ़ीड को सही तरीके से प्रोसेस करने के लिए, नीचे दिया गया तरीका अपनाएं:
- अपलोड करने का शेड्यूल तय करें और शेड्यूल का पालन करने के लिए, इन्वेंट्री के हर इंस्टेंस को कॉन्फ़िगर करें.
- हर उदाहरण के लिए यूनीक शार्ड नंबर असाइन करें (जैसे, US = N, EU = N + 1).
total_shards
को शार्ड की कुल संख्या पर सेट करें. - अपलोड करने के लिए शेड्यूल किए गए हर समय के लिए,
generation_timestamp
औरnonce
को चुनें.FeedMetadata
में, सभी इंस्टेंस में इन दोनों फ़ील्ड के लिए एक जैसी वैल्यू रखने के लिए सेट करें.generation_timestamp
, हाल ही का या हाल का होना चाहिए (आम तौर पर, पार्टनर का 'डेटा पढ़ने का टाइमस्टैंप)'
- सभी शार्ड अपलोड होने के बाद, Google
generation_timestamp
औरnonce
की मदद से शार्ड को ग्रुप में बांट देता है.
Google, फ़ीड को एक फ़ीड के तौर पर प्रोसेस करेगा. हालांकि, हर शार्ड, पार्टनर की इन्वेंट्री के अलग-अलग इलाके को दिखाता है और उसे दिन के अलग-अलग समय पर अपलोड किया जा सकता है. हालांकि, इसके लिए ज़रूरी है कि सभी शार्ड में generation_timestamp
एक ही हो.
इलाके के हिसाब से, खरीदारी के लिए उपलब्धता फ़ीड का उदाहरण
शार्ड 0 - अमेरिका की इन्वेंट्री
{ "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 - ईयू इन्वेंट्री
{ "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" } ] } ] }