ভাগ করা ফিড ফাইল

আপনার ইনভেন্টরির উপর নির্ভর করে, শার্ডিং (বা একাধিক ফাইলে ফিড বিভক্ত করা) প্রয়োজন হতে পারে।

কখন শর্ডিং ব্যবহার করবেন

  • 1 ফাইলের জন্য ফিড 200 MB ছাড়িয়ে গেছে (gzip কম্প্রেশনের পরে)।

    • উদাহরণ: জেনারেট করা প্রাপ্যতা ফিড হল 1 GB। এটিকে 5+ পৃথক ফাইলে (বা শার্ড) শার্ড করা উচিত।
  • অংশীদার ইনভেন্টরি সিস্টেম এবং/অথবা অঞ্চল জুড়ে বিতরণ করা হয় যার ফলে ইনভেন্টরি সমন্বয় করতে অসুবিধা হয়।

    • উদাহরণ: অংশীদারের ইউএস এবং ইইউ ইনভেন্টরি রয়েছে যা আলাদা সিস্টেমে থাকে। ফিডটি 2টি ফাইল (বা শার্ড) দিয়ে তৈরি করা হতে পারে, 1টি US এর জন্য এবং 1টি EU-এর জন্য একই nonce এবং generation_timestamp সহ।

সাধারণ নিয়ম

  • প্রতিটি শার্ড 1 ফাইলের জন্য 200 MB অতিক্রম করতে পারে না (gzip কম্প্রেশনের পরে)।
  • আমরা প্রতি ফিডে 20 শার্ডের বেশি না দেওয়ার পরামর্শ দিই। আপনার যদি এমন কোনো ব্যবসায়িক ন্যায্যতা থাকে যার জন্য সেই পরিমাণের বেশি প্রয়োজন, অনুগ্রহ করে আরও নির্দেশের জন্য সহায়তার সাথে যোগাযোগ করুন।
  • পৃথক রেকর্ড (উদাহরণস্বরূপ একটি Merchant অবজেক্ট) অবশ্যই একটি শার্ডে পাঠাতে হবে, সেগুলি একাধিক শার্ডে বিভক্ত করা যাবে না। যাইহোক, ভবিষ্যতে ফিডের জন্য তাদের একই shard_number সহ শার্ডে পাঠাতে হবে না।
  • ভালো পারফরম্যান্সের জন্য, আপনার ডেটা শার্ডগুলির মধ্যে সমানভাবে বিভক্ত করা উচিত যাতে সমস্ত শার্ড ফাইলের আকার একই রকম হয়।

কিভাবে শার্ড ফিড

প্রতিটি ফাইলের জন্য (বা শার্ড), FeedMetadata নিম্নলিখিত সেট করুন:

  • processing_instruction PROCESS_AS_COMPLETE এ সেট করা হয়েছে।
  • shard_number ফিডের বর্তমান শার্ডে সেট করা হয়েছে (0 থেকে শুরু করে total_shards - 1টি বিরতি ছাড়াই)
  • total_shards ফিডের জন্য মোট শার্ডের সংখ্যা সেট করা হয়েছে (1 থেকে শুরু করে)।
  • একটি অনন্য শনাক্তকারীতে সেট করা nonce যা একই ফিডের সমস্ত শার্ড জুড়ে একই কিন্তু অন্যান্য ফিডের মান থেকে আলাদা। nonce অবশ্যই একটি ধনাত্মক int ( uint64 ) হতে হবে।
  • generation_timestamp হল ইউনিক্স এবং ইপোচ ফরম্যাটে টাইমস্ট্যাম্প। এটি ফিডের সমস্ত অংশ জুড়ে একই হওয়া উচিত।

প্রস্তাবিত: প্রতিটি ফাইলের জন্য (বা শার্ড), ফিডের ধরন, টাইমস্ট্যাম্প, শার্ড নম্বর এবং মোট শার্ড সংখ্যা নির্দেশ করতে ফাইলের নাম সেট করুন। শার্ডগুলি প্রায় সমান আকারের হওয়া উচিত এবং সমস্ত শার্ডগুলি আপলোড হয়ে গেলে প্রক্রিয়া করা হয়৷

  • Example: "availability_feed_1574117613_001_of_002.json.gz"

Sharded উপলব্ধতা ফিড উদাহরণ

শার্ড 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"
        }
      ]
    }
  ]
}

শার্ড 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"
        }
      ]
    }
  ]
}

অংশীদার বিতরণকৃত ইনভেন্টরির জন্য শার্ডিং ব্যবহার করা

অংশীদারদের জন্য একাধিক সিস্টেম বা অঞ্চল জুড়ে একটি একক ফিডে বিতরণ করা ইনভেন্টরি একত্রিত করা চ্যালেঞ্জিং হতে পারে। প্রতিটি বিতরণ করা সিস্টেমের ইনভেন্টরি সেটের সাথে মেলে প্রতিটি শার্ড সেট করে পুনর্মিলন চ্যালেঞ্জগুলি সমাধান করতে Sharding ব্যবহার করা যেতে পারে।

উদাহরণস্বরূপ, বলুন একজন অংশীদারের ইনভেন্টরি 2টি অঞ্চলে বিভক্ত (US এবং EU ইনভেন্টরি), যা 2টি পৃথক সিস্টেমে থাকে৷

অংশীদার প্রতিটি ফিডকে 2টি ফাইলে (বা শার্ড) ভাগ করতে পারে:

  • মার্চেন্ট ফিড: US এর জন্য 1 শার্ড, EU এর জন্য 1 শার্ড
  • পরিষেবা ফিড: US-এর জন্য 1 শার্ড, EU-এর জন্য 1 শার্ড৷
  • প্রাপ্যতা ফিড: US এর জন্য 1 শার্ড, EU এর জন্য 1 শার্ড

ফিডগুলি সঠিকভাবে প্রক্রিয়া করা হয়েছে তা নিশ্চিত করতে নীচের পদক্ষেপগুলি অনুসরণ করুন:

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