بسته به موجودی شما، ممکن است به اشتراک گذاری (یا تقسیم فیدها به چندین فایل) ضروری باشد.
زمان استفاده از شاردینگ
فید بیش از 200 مگابایت برای 1 فایل (پس از فشرده سازی gzip) است.
- مثال: فید در دسترس بودن ایجاد شده 1 گیگابایت است. این باید به بیش از 5 فایل جداگانه (یا خردهها) تقسیم شود.
موجودی شریک در بین سیستم ها و/یا مناطق توزیع می شود که منجر به مشکل در تطبیق موجودی می شود.
- مثال: شریک دارای موجودی ایالات متحده و اتحادیه اروپا است که در سیستم های جداگانه زندگی می کنند. فید ممکن است با 2 فایل (یا خرده)، 1 برای ایالات متحده و 1 برای اتحادیه اروپا با همان
nonce
وgeneration_timestamp
ایجاد شود.
- مثال: شریک دارای موجودی ایالات متحده و اتحادیه اروپا است که در سیستم های جداگانه زندگی می کنند. فید ممکن است با 2 فایل (یا خرده)، 1 برای ایالات متحده و 1 برای اتحادیه اروپا با همان
قوانین عمومی
- هر قطعه نمی تواند بیش از 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 خرده برای اتحادیه اروپا
برای اطمینان از پردازش صحیح فیدها، مراحل زیر را دنبال کنید:
- در مورد یک برنامه زمانبندی آپلود تصمیم بگیرید و هر نمونه از موجودی را برای پیروی از زمانبندی پیکربندی کنید.
- اعداد تکه تکه ای را برای هر نمونه اختصاص دهید (به عنوان مثال US = N، EU = N + 1).
total_shards
را روی تعداد کل خرده ها تنظیم کنید. - در هر زمان آپلود برنامهریزیشده، روی
generation_timestamp
وnonce
تصمیم بگیرید. درFeedMetadata
، همه نمونهها را طوری تنظیم کنید که مقادیر یکسانی برای این دو فیلد داشته باشند.-
generation_timestamp
باید گذشته فعلی یا اخیر باشد (در حالت ایده آل، مهر زمانی خوانده شده در پایگاه داده شریک)
-
- پس از آپلود همه خردهها، 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" } ] } ] }