راکت
Mostafa Nazar
Mostafa Nazar
توسط Mostafa Nazar مطرح شد
4 پاسخ

به روزرسانی تعداد زیادی رکورد در لاراول

سلام
فرض کنید که 10000 تا رکورد تو یک جدول داریم و اینا رو میخوایم به روز رسانی کنیم همه رو .
چیکار کنیم که به روز رسانی انجام بشه و به سرور فشار نیاد و خطا نگیره .
مثل طوری باشه یه تاخیر بدیم و هر مرحله 50 تا رو به روزرسانی کنه تا اخر بره .
با تشکر


ثبت پرسش جدید
محسن بستان
محسن بستان
تخصص :Senior Backend Developer
@mohsenbostan6 سال پیشمطرح شد
1

@mostafa.8722
سلام.
می تونید برای آپدیت کردن یک Job و Queue بسازید که کار آپدیت کردن رو در پس زمینه انجام بده.


محمدحسن یگانه
محمدحسن یگانه
تخصص :Full-Stack Web Developer Freelancer
@mhyeganeh6 سال پیشمطرح شد
1

یکی از راه هاش اینه که این عملیات بصورت دسته دسته بروی رکوردها اعمال بشه نه همگی یکجا. برای این کار هم خود لاراول یک قابلیت داره بنام chunk که توضیحات و مثال هاش رو میتونید از طریق لینک زیر مطالعه کنید:

https://laravel.com/docs/7.x/queries#chunking-results

البته این نکته رو هم باید اضافه کنم که تا حدی بستگی داره به نوع تغییری که میخواید بدید. مثلا اگر قراره فلان فیلد تمام رکوردها برابر یک مقدار ثابت قرار بگیره اصلا نیازی به این کارها نیست و باید کوئری تون رو به شکلی بهینه بنویسید که این عملیات رو با یک کوئری انجام بده. خیلی هم سریع این کار انجام میشه معمولا. ولی همین کار رو به اشتباه میشه از طریق حلقه foreach انجام داد و باعث ایجاد یک کوئری جداگانه به ازای هر یک از رکورد ها بشیم که طبیعتا زمان خیلی بیشتری میبره و به شدت غیربهینه ست.

اما اگر قراره این آپدیت همراه با محاسبه و شرط و شروط باشه، فکر میکنم بهترین گزینه همون‌ chunk باشه. برای اینکه با ارور timeout و بلاتکلیفی کاربر در زمان انجام درخواست هم روبرو نشید معمولا این کار توسط job و queue در پشت صحنه انجام میشه.


مهدی
مهدی
تخصص :برنامه نویس سرور
@mahdi126 سال پیشمطرح شد
1

بستگی داره به نوع کارتون.
مهندسی یگانه اشاره کردن ، چیزی که مشخصه بیشتر فشار کاری روی dbms ببرید با یک کوئری خوب خیلی منطقی و بهینه هست تا ببرید روی واسطه مثل وب سرویس یا ...


علی بیات
علی بیات
تخصص :توسعه دهنده ارشد وب
@ali.bayat6 سال پیشمطرح شد
0

کدهای PHP به شکل پیش‌فرض synchronous اجرا میشند
پس بهتره به جای فشار آوردن روی سرور همونطور که دوستان گفتند از Job و Queue استفاده کنی.

اما در عین حال در پروژه های بزرگتر که پرفرمنس مهم میشه، میشه از اجرای کدها به شکل asynchronous در PHP استفاده کرد.
که میتونی ابزارهایی مثل Swoole یا ReactPHP رو بررسی کنی


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام