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

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

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

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

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

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

सामान्य नियम

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

फ़ीड को अलग-अलग हिस्सों में बांटने का तरीका

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

  • processing_instruction को PROCESS_AS_COMPLETE पर सेट करें.
  • shard_number को फ़ीड के मौजूदा शार्ड पर सेट किया गया है (बिना किसी रुकावट के 0 से total_shards - 1 तक)
  • total_shards को फ़ीड के लिए, शार्ड की कुल संख्या पर सेट करें (शुरू से 1).
  • nonce को एक यूनीक आइडेंटिफ़ायर पर सेट किया गया है, जो एक ही फ़ीड के सभी स्hard में एक जैसा होता है. हालांकि, यह अन्य फ़ीड की वैल्यू से अलग होता है. nonce एक पॉज़िटिव पूर्णांक (uint64) होना चाहिए.
  • generation_timestamp, यूनिक्स और EPOCH फ़ॉर्मैट में टाइमस्टैंप है. यह फ़ीड के सभी शार्ड में एक जैसा होना चाहिए.

सुझाव: हर फ़ाइल (या शर्ड) के लिए, फ़ाइल का नाम सेट करें, ताकि फ़ीड टाइप, टाइमस्टैंप, शर्ड नंबर, और शर्ड की कुल संख्या का पता चल सके. सभी स्hards का साइज़ एक जैसा होना चाहिए. सभी स्hards अपलोड होने के बाद, उन्हें प्रोसेस किया जाता है.

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

पहला स्hard

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

दूसरा स्hard

{
  "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. हर इंस्टेंस के लिए यूनीक शार्ड नंबर असाइन करें. उदाहरण के लिए, अमेरिका = N, यूरोपीय संघ = 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"
        }
      ]
    }
  ]
}

पहला स्hard - ईयू इन्वेंट्री

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