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

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

sharding का इस्तेमाल कब करना चाहिए

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

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

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

सामान्य नियम

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

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

इवेंट फ़ीड को अलग-अलग हिस्सों में बांटा जा सकता है. इसके लिए, एक JSON फ़ाइल को अलग-अलग JSON फ़ाइलों में बांटें. इन फ़ाइलों में ऐसे इवेंट होने चाहिए जो एक-दूसरे से ओवरलैप न हों. साथ ही, फ़ाइल डिस्क्रिप्टर JSON को JSON फ़ाइल के नामों की सूची के साथ अपडेट करें.

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

शर्ड किए गए डेटा का उदाहरण

फ़ाइल की जानकारी - event.feeddata.v1_1728306001.filedescriptor.json

{
  "generation_timestamp": 1728306001,
  "name": "event.feeddata.v1",
  "data_file": [
    "event.feeddata.v1_1728306001_001.json",
    "event.feeddata.v1_1728306001_002.json"
  ]
}

शर्ड 0 - event.feeddata.v1_1728306001_001.json

{
  "data": [
    {
      "id": "event-1",
      ...
    },
    {
      "id": "event-2",
      ...
    }
  ]
}

पहला स्hard - event.feeddata.v1_1728306001_002.json

{
  "data": [
    {
      "id": "event-3",
      ...
    },
    {
      "id": "event-4",
      ...
    }
  ]
}

पार्टनर की डिस्ट्रिब्यूट की गई इन्वेंट्री के लिए स्HARD

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

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

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

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

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

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