फ़ीड की फ़ाइलों को अलग-अलग हिस्सों में बांटने की सुविधा (लेगसी)

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

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

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

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

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

सामान्य नियम

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

फ़ीड को कैसे बांटा जाता है

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

  • processing_instructionको PROCESS_AS_COMPLETE पर सेट करें.
  • shard_number को फ़ीड के मौजूदा शार्ड पर सेट किया गया है (0 से shard_number - 1 तक, बिना किसी रुकावट के)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"
        }
      ]
    }
  ]
}

पहला शार्ड

{
  "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"
        }
      ]
    }
  ]
}

पार्टनर के साथ शेयर की गई इन्वेंट्री के लिए शार्डिंग का इस्तेमाल करना

पार्टनर के लिए, अलग-अलग सिस्टम और/या क्षेत्रों में डिस्ट्रिब्यूट की गई इन्वेंट्री को एक फ़ीड में शामिल करना मुश्किल हो सकता है. शार्डिंग का इस्तेमाल, मेल न खाने वाले डेटा की समस्या को हल करने के लिए किया जा सकता है. इसके लिए, हर शार्ड को हर डिस्ट्रिब्यूटेड सिस्टम के इन्वेंट्री सेट से मैच करने के लिए सेट किया जाता है.

उदाहरण के लिए, मान लें कि किसी पार्टनर की इन्वेंट्री को दो क्षेत्रों (अमेरिका और ईयू की इन्वेंट्री) में बांटा गया है. ये दोनों इन्वेंट्री, दो अलग-अलग सिस्टम में मौजूद हैं.

पार्टनर हर फ़ीड को दो फ़ाइलों (या शार्ड) में बांट सकता है:

  • कारोबारी या कंपनी का फ़ीड: अमेरिका के लिए 1 शार्ड, ईयू के लिए 1 शार्ड
  • सेवाओं का फ़ीड: अमेरिका के लिए 1 शार्ड, ईयू के लिए 1 शार्ड
  • उपलब्धता फ़ीड: अमेरिका के लिए 1 शार्ड, ईयू के लिए 1 शार्ड

यह पक्का करने के लिए कि फ़ीड सही तरीके से प्रोसेस किए गए हैं, यहां दिया गया तरीका अपनाएं:

  1. अपलोड करने का शेड्यूल तय करें. साथ ही, इन्वेंट्री के हर इंस्टेंस को शेड्यूल के हिसाब से अपलोड करने के लिए कॉन्फ़िगर करें.
  2. हर इंस्टेंस के लिए यूनीक शार्ड नंबर असाइन करें. उदाहरण के लिए, अमेरिका = N, ईयू = N + 1. total_shards को शार्ड की कुल संख्या पर सेट करें.
  3. अपलोड करने के लिए शेड्यूल किए गए हर समय पर, generation_timestamp और nonce तय करें. FeedMetadata में, सभी इंस्टेंस के लिए इन दोनों फ़ील्ड की वैल्यू एक जैसी सेट करें.
    • generation_timestamp मौजूदा या हाल ही की होनी चाहिए (आदर्श रूप से, पार्टनर के रीड-ऐट डेटाबेस का टाइमस्टैंप)
  4. सभी शार्ड अपलोड हो जाने के बाद, Google उन्हें generation_timestamp और nonce के ज़रिए ग्रुप करता है.

Google, फ़ीड को एक ही फ़ीड के तौर पर प्रोसेस करेगा. भले ही, हर शार्ड पार्टनर की इन्वेंट्री के अलग-अलग क्षेत्र को दिखाता हो और उसे दिन के अलग-अलग समय पर अपलोड किया गया हो. हालांकि, यह ज़रूरी है कि सभी शार्ड में generation_timestamp की वैल्यू एक जैसी हो.

क्षेत्र के हिसाब से, शार्ड किए गए उपलब्धता फ़ीड का उदाहरण

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 - EU Inventory

{
  "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"
        }
      ]
    }
  ]
}