शार्डिंग फ़ीड फ़ाइलें

आपकी इन्वेंट्री के हिसाब से, शार्डिंग (या फ़ीड को कई फ़ाइलों में बांटना) ज़रूरी हो सकता है.

शार्डिंग का इस्तेमाल कब करना चाहिए

  • 1 फ़ाइल के लिए फ़ीड का साइज़ 200 एमबी से ज़्यादा है (gzip कंप्रेस करने के बाद).

    • उदाहरण: जनरेट किया गया उपलब्धता फ़ीड 1 जीबी है. इसे 5 से ज़्यादा अलग-अलग फ़ाइलों (या शार्ड) से शार्ड किया जाना चाहिए.
  • पार्टनर इन्वेंट्री को सभी सिस्टम और/या इलाकों में बांटा जाता है. इससे, इन्वेंट्री का मिलान करने में परेशानी होती है.

    • उदाहरण: पार्टनर के पास अमेरिका और ईयू की इन्वेंट्री है, जो अलग-अलग सिस्टम में मौजूद होती है. हो सकता है कि फ़ीड दो फ़ाइलों (या शार्ड) के साथ, एक अमेरिका के लिए, और एक ईयू (यूरोपीय संघ) के लिए एक ही nonce और generation_timestamp के साथ जनरेट हो.

सामान्य नियम

  • हर शार्ड, 1 फ़ाइल के लिए 200 एमबी से ज़्यादा नहीं हो सकता (gzip कंप्रेस करने के बाद).
  • हमारा सुझाव है कि हर फ़ीड में 20 से ज़्यादा शार्ड न रखें. अगर आपके पास कारोबार के लिए बताई गई कोई ऐसी वजह है जहां उससे ज़्यादा की ज़रूरत है, तो कृपया ज़्यादा जानकारी के लिए सहायता टीम से संपर्क करें.
  • अलग-अलग शार्ड के साथ अलग-अलग रिकॉर्ड (उदाहरण के लिए, एक Merchant ऑब्जेक्ट) भेजे जाने चाहिए. इन्हें एक से ज़्यादा शार्ड में नहीं बांटा जा सकता. हालांकि, उन्हें आने वाले फ़ीड के लिए शार्ड में shard_number के साथ भेजना ज़रूरी नहीं है.
  • बेहतर परफ़ॉर्मेंस के लिए, आपके डेटा को शार्ड के बीच बराबर बांटा जाना चाहिए, ताकि सभी शेयर की गई फ़ाइलें एक जैसी हों.

फ़ीड को शार्ड करने का तरीका

हर फ़ाइल (या शार्ड) के लिए, FeedMetadata को यहां दिए गए तरीके से सेट करें:

  • processing_instruction को PROCESS_AS_COMPLETE पर सेट किया गया.
  • shard_number को फ़ीड के मौजूदा शार्ड पर सेट किया गया (बिना किसी रुकावट के, शून्य से total_shards तक शुरू करना)
  • total_shards, फ़ीड के लिए शार्ड की कुल संख्या (1 से शुरू करके) पर सेट है.
  • nonce एक खास पहचानकर्ता पर सेट है, जो एक ही एक ही फ़ीड के सभी वैल्यू के लिए समान है, लेकिन दूसरे फ़ीड की वैल्यू से अलग है.
  • generation_timestamp, यूनिक्स और 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. अपलोड करने का शेड्यूल तय करें और शेड्यूल का पालन करने के लिए, इन्वेंट्री के हर इंस्टेंस को कॉन्फ़िगर करें.
  2. हर इंस्टेंस के लिए यूनीक शार्ड नंबर असाइन करें (उदाहरण के लिए, US = N, EU = N + 1). total_shards को शार्ड की कुल संख्या पर सेट करें.
  3. हर अपलोड के समय पर, generation_timestamp और nonce तय करें. FeedMetadata में, इन दो फ़ील्ड के लिए एक जैसे वैल्यू रखने के लिए सभी इंस्टेंस सेट करें.
    • generation_timestamp हाल ही का या हाल का होना चाहिए (आम तौर पर, पार्टनर का रीड-आउट डेटाबेस टाइमस्टैंप)
  4. सभी शार्ड अपलोड होने के बाद, 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"
        }
      ]
    }
  ]
}

शार्ड 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"
        }
      ]
    }
  ]
}