ورود

View Full Version : حرفه ای: زمان بندی انتشار یک پست در سایت



سعید کشاورز
دوشنبه 06 آذر 1396, 17:30 عصر
سلام دوستان.
فرض کنید یک سیستم مدیریت محتوا داریم و قصد انتشار یک مطلب در آینده و در ساعت و تاریخ مشخص را داریم.
وقتی پست رو تعریف میکنیم میگیم مثلا در تاریخ 6 آذر ساعت 9 شب روی سایت منتشر بشه.
آیا همچین موردی رو مثلا از طریق quartz (https://www.quartz-scheduler.net/) پیاده سازی میکنند؟
سوال من اینه سیستم های مدیریت زمان بندی مثل همین quartz روی سرور فشار نمیارن؟ با توجه به اینکه سرورهایی که استفاده میکنم اشتراکی هست مشکلی بوجود نمیاره؟
مثلا بیام یه Task تعریف کنم فقط بیاد چک بکنه در فلان ساعت اگه پستی هست منتشرش بکنه.
یه مقداری می خوام بدونم سناریو همچین مواردی چجوری پیاده سازی میشه؟
معمولا توی سایت های فروشگاه آنلاین این موارد خیلی دیده میشه.
آیا اونا هم از همین روش ها استفاده میکنن ؟ بهینه ترین روش چیه برای این موردی که مطرح کردم؟
پیشاپیش تشکر

hakim22
دوشنبه 06 آذر 1396, 17:45 عصر
من تا به حال با Quartz کار نکردم ولی شما می توانید یک فیلتر با LINQ تعریف کنید که هر پستی تاریخ انتشارش از حالا به قبل بود نمایش داده بشه.

سعید کشاورز
دوشنبه 06 آذر 1396, 18:41 عصر
من تا به حال با Quartz کار نکردم ولی شما می توانید یک فیلتر با LINQ تعریف کنید که هر پستی تاریخ انتشارش از حالا به قبل بود نمایش داده بشه.

ممنون
خب این موردی که میگین باید داخل یه Task تعریف بشه.
مثلا این Quartz هی میاد دقیقه به دقیقه چک میکنه..
یه جورایی شبیه Timer توی winForm هست
حس میکنم بار اضافی میاره روی سرور.

اینکه میگین با linq کوئری زده بشه مشکلی نیست...
سناریو من به این صورت یه تاریخ انشار دارم با یه فیلد isPublishe
در حالت عادی False هست
وقتی مثلا تاریخ شد 7 آذر میخام اون فیلد IsPublished بشه True

Moien Tajik
دوشنبه 06 آذر 1396, 21:32 عصر
وقتی پست رو تعریف میکنیم میگیم مثلا در تاریخ 6 آذر ساعت 9 شب روی سایت منتشر بشه.
آیا همچین موردی رو مثلا از طریق quartz (https://www.quartz-scheduler.net/) پیاده سازی میکنند؟

به این شکل امکانش هست اما اینکه بشه در runtime بصورت Dynamic بشه Job تعریف کرد امکانش نیست.




سوال من اینه سیستم های مدیریت زمان بندی مثل همین quartz روی سرور فشار نمیارن؟ با توجه به اینکه سرورهایی که استفاده میکنم اشتراکی هست مشکلی بوجود نمیاره؟

این مورد بیشتر بستگی به interval ای داره که قرار دادید تا Job انجام بشه. اگر قرار باشه بعنوان مثال هر 10 ثانیه Job اجرا بشه قطعا فشار زیادی به سرور وارد میکنه ; اما اگر مثلا هر 24 ساعت interval رو قرار بدید مشکلی بوجود نمیاد (eBay از Quartz بعنوان Scheduler استفاده میکنه).
این مقاله درباره performance اش کمک میکنه : http://www.ebaytechblog.com/2016/01/14/performance-tuning-on-quartz-scheduler/


مثلا بیام یه Task تعریف کنم فقط بیاد چک بکنه در فلان ساعت اگه پستی هست منتشرش بکنه.
امکان این مورد در runtime وجود نداره.
راهی که هست اینه که برای پست ها یک فیلد PublishDate و IsPublished بزارید.
Quartz رو براش یک Job تعریف کنید که هر 24 ساعت اجرا بشه و چک کنید اگر تاریخ فعلی برابر PublishDate هست ، پست رو منتشر کنید و IsPublished رو true کنید.

سعید کشاورز
دوشنبه 06 آذر 1396, 22:34 عصر
امکان این مورد در runtime وجود نداره.
راهی که هست اینه که برای پست ها یک فیلد PublishDate و IsPublished بزارید.
Quartz رو براش یک Job تعریف کنید که هر 24 ساعت اجرا بشه و چک کنید اگر تاریخ فعلی برابر PublishDate هست ، پست رو منتشر کنید و IsPublished رو true کنید.

فکر کنم من دنبال همین کلمه Runtime بودم اسمش رو نمیدونستم:لبخند:
اینی که میگی یه مشکل داره اونم اینکه مثلا من میگم راس ساعت 18 توی فلان تاریخ...
حالا بیام بگم 24 ساعته چک بکن که نمیشه راس ساعت 18 پست من منتشر بشه.
این مورد توی جوملا وردپرس هست.
فکر کنم من دنبال همون Runtime باشم.
اصلا چجوری داستان این مدل پیاده سازی؟ چه سناریوی بهینه ای براش وجود داره؟

EnKamran
سه شنبه 07 آذر 1396, 21:00 عصر
سلام
خیلی ساده عرض كنم چیزی كه شما دنبالش هستید بله فشار زیادی روی سرور میاره و راه حل جناب حكیم خیلی ساده تر وكم هزینه تر هست.شما بیا تاریخ انتشار رو ذخیره كن و وقتی داری واكشی میكنی از تاریخ حال به قبل رو واكشی كن