اشتراک گذاری فایل های فید

بسته به موجودی شما، ممکن است به اشتراک گذاری (یا تقسیم فیدها به چندین فایل) ضروری باشد.

زمان استفاده از شاردینگ

  • فید بیش از 200 مگابایت برای 1 فایل (پس از فشرده سازی gzip) است.

    • مثال: فید در دسترس بودن ایجاد شده 1 گیگابایت است. این باید به بیش از 5 فایل جداگانه (یا خرده‌ها) تقسیم شود.
  • موجودی شریک در بین سیستم ها و/یا مناطق توزیع می شود که منجر به مشکل در تطبیق موجودی می شود.

    • مثال: شریک دارای موجودی ایالات متحده و اتحادیه اروپا است که در سیستم های جداگانه زندگی می کنند. فید ممکن است با 2 فایل (یا خرده)، 1 برای ایالات متحده و 1 برای اتحادیه اروپا با همان nonce و generation_timestamp ایجاد شود.

قوانین عمومی

  • هر قطعه نمی تواند بیش از 200 مگابایت برای 1 فایل (پس از فشرده سازی 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 مُهر زمانی در قالب یونیکس و 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"
        }
      ]
    }
  ]
}

شارد 1

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

استفاده از اشتراک گذاری برای موجودی توزیع شده شریک

ادغام موجودی توزیع شده در چندین سیستم و یا منطقه در یک خوراک واحد برای شرکا می تواند چالش برانگیز باشد. شاردینگ را می توان برای حل چالش های تطبیق با تنظیم هر قطعه برای مطابقت با مجموعه موجودی هر سیستم توزیع شده استفاده کرد.

به عنوان مثال، فرض کنید موجودی یک شریک به 2 منطقه (موجودی ایالات متحده و اتحادیه اروپا)، که در 2 سیستم جداگانه زندگی می کنند، جدا شده است.

شریک می تواند هر فید را به 2 فایل (یا خرده) تقسیم کند:

  • خوراک بازرگانان: 1 خرده برای ایالات متحده، 1 خرده برای اتحادیه اروپا
  • خوراک خدمات: 1 خرده برای ایالات متحده، 1 خرده برای اتحادیه اروپا
  • خوراک موجود: 1 خرده برای ایالات متحده، 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 در همه خرده‌ها یکسان باشد.

نمونه فید در دسترس بودن خرد شده بر اساس منطقه

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

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