تاریخ امروز:1 اردیبهشت 1403
استفاده از chunk

استفاده از Chunk در خواندن اطلاعات دیتابیس لاراول و افزایش سرعت لاراول

در این پست می‌خوام استفاده از Chunk در لاراول رو آموزش بدم خدمتتون. زمانی که داده‌های زیادی از دیتابیس می‌خواهید بخوانید (مثلا ۲۰ هزار رکورد) معمولا این عمل تا وسطش که پیش میره، اررور out of memory رو دریافت می‌کنید. همچین کوئری سرعت برنامه‌ رو هم به شدت کاهش میده. برای همین، روشی در لاراول وجود داره به اسم Chunk که میاد به طور مثال ۲۰۰ تا ۲۰۰ تا می‌خونه دیتا رو. هم باعث افزایش سرعت میشه، هم فشار کمتری به سرور میاره و اررور out of memory هم دریافت نمی‌کنید.

مثال زیر رو ببینید:

$users = User::all();

foreach ($users as $user) {
    $tasks = $user->tasks;
    // do some processing...
}

این همچین خروجی میده به من:

Chunk در لاراول

Chunk در لاراول

همونطور که می‌بینید، روی ۸۸٪ اررور داد. خب، این خوب نیستش، برای همین کدم رو اینجوری اصلاح می‌کنم:

User::chunk(200, function($users) {
    foreach ($users as $user) {
        $tasks = $user->tasks;
        // do some processing...
    }
});

و حالا که لود کنم کد رو همچین مقداری رو می‌گیرم:

استفاده از chunk

استفاده از chunk

نکته: ما می‌تونیم eager loading رو با chunk ترکیب کنیم. مثال زیر رو ببینید:

User::with('tasks')->chunk(200, function($users) {
    foreach ($users as $user) {
        $tasks = $user->tasks;
        // do some processing...
    }
});

اینجوری باز هم سرعت لاراول رو افزایش دادیم.

این مورد جزء موارد ساده‌ای هستش که خیلی وقت‌ها توی پروژه‌ها رعایت نمی‌کنیمش و پروژه که یه مقدار بزرگ شد مجبور می‌شیم برگردیم و از اول همه‌ی کد رو بخونیم و اصلاح کنیم. بهتره توی کوئری‌هاتون ازش استفاده کنید. ولی همیشه یادتون باشه، یه اصطلاحی هست به نام Over Optimize . زیاده روی نکنید، چون نتیجه‌ی معکوس می‌گیرید توی بهینه‌سازی.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *