শার্ড ফিড ফাইল (লিগেসি)

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

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

  • ১টি ফাইলের জন্য ফিড ২০০ এমবি অতিক্রম করেছে (gzip কম্প্রেশনের পরে)।

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

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

সাধারণ নিয়ম

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

ফিড কীভাবে টুকরো টুকরো করবেন

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

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

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

  • Example: “availability_feed_1574117613_001_of_002.json.gz”

শার্ডেড অ্যাভালিবিলিটি ফিডের উদাহরণ

শার্ড ০

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

শার্ড ২

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

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

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

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

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

  • মার্চেন্ট ফিড: মার্কিন যুক্তরাষ্ট্রের জন্য ১টি, ইইউর জন্য ১টি
  • পরিষেবা ফিড: মার্কিন যুক্তরাষ্ট্রের জন্য ১টি শার্ড, ইইউর জন্য ১টি শার্ড
  • প্রাপ্যতা ফিড: মার্কিন যুক্তরাষ্ট্রের জন্য ১টি শার্ড, ইইউর জন্য ১টি শার্ড

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

  1. আপলোডের সময়সূচী নির্ধারণ করুন এবং প্রতিটি ইনভেন্টরির ইনস্ট্যান্স সেই সময়সূচী অনুসরণ করে কনফিগার করুন।
  2. প্রতিটি উদাহরণের জন্য অনন্য শার্ড সংখ্যা নির্ধারণ করুন (যেমন US = N, EU = N + 1)। মোট শার্ড সংখ্যার সাথে total_shards সেট করুন।
  3. প্রতিটি নির্ধারিত আপলোড সময়ে, একটি generation_timestamp এবং nonce নির্ধারণ করুন। FeedMetadata তে, এই দুটি ক্ষেত্রের জন্য একই মান ধরে রাখার জন্য সমস্ত ইনস্ট্যান্স সেট করুন।
    • generation_timestamp বর্তমান বা সাম্প্রতিক অতীতের হওয়া উচিত (আদর্শভাবে, অংশীদারের পঠনযোগ্য ডাটাবেস টাইমস্ট্যাম্প)
  4. সমস্ত শার্ড আপলোড করার পরে, গুগল শার্ডগুলিকে generation_timestamp এবং nonce এর মাধ্যমে গ্রুপ করে।

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

অঞ্চল অনুসারে শার্ডেড অ্যাভালিবিলিটি ফিডের উদাহরণ

শার্ড ০ - মার্কিন ইনভেন্টরি

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

শার্ড ১ - ইইউ ইনভেন্টরি

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