فیلترهای پیچیده در لاراول

- 2 هفته پیش
توسط علی بیات آپدیت شد
smart ( 2930 تجربه )
2 هفته پیش

وقت بخیر دوستان. من توی یه پروژه برای بخش فیلترینگ مجبور شدم یه فیلتر پیچیده بنویسم که حدود 300 خط شد. از متدهای whereHas, whereIn , where , if, ... خیلی زیاد استفاده کردم.فیلترینگ هم به این صورته که یه جدول event داریم و یه جدول event metadata که مربوط به داده های تکمیلی رخدادها هستش و یه جدول time که مربطو به زمان های رخداد هست که من بر اساس ستون های این جدول ها فیلترینگ رو انجام دادم. تا الان همه چیز خوب پیش رفته و مشکلی نبوده. تا حدود 200-300 هزار رکورد که توی دیتابیس بوده هم مشکلی نبود.

مشکل از اونجا شروع شد که تعداد رکوردها زیاد شد مثلا حدود 500هزار رکورد شدن و کم کم زمان فیترینگ زیاد شد مثلا 2 یا 3 ثانیه طول میکشه و خب طبیعتا به چند میلیون رکورد که برسه دیگه نمیشه از فیلترینگ استفاده کرد!
میخوام ببینم چه راه حل هایی هست که این زمان خیلی خیلی کم بشه در حد صدم ثانیه ؟
مثلا یه سایتی مثل دیوار با اینکه ده ها میلیون آگهی داره ولی بخش فیلترینگش در حد صدم ثانیه هست!
چطور میشه به این کارایی رسید؟

علی بیات ( 106482 تجربه )
2 هفته پیش

به جز تعداد رکوردها ، کوئری هایی هم که مینویسید باید بهینه باشند...
مقاله زیر رو بررسی کنید:
https://m.dotdev.co/writing-advanced-eloquent-search-query-filters-de8b6c2598db

smart ( 2930 تجربه )
2 هفته پیش

تقریبا به همی شکل نوشتم ولی اون refactor های آخر رو انجام ندادم ولی خب حس میکنم سرعت باید بهتر باشه ...
ممنونم به هرحال

علی بیات ( 106482 تجربه )
2 هفته پیش

همین refactor ها هر چند ممکنه زیاد به چشم نیاند اما توی تعداد کوئری های بالا کاملا اثرشون دیده میشه.

smart ( 2930 تجربه )
2 هفته پیش

پس اعمالشو کنم ببینم چطور میشه. یه سوال دیگه اینکه من چندجا خوندم که ظاهرا توی حجم دیتای بالا استفاده از DB::raw بهتر از eloquent هستش. درسته ؟؟

علی بیات ( 106482 تجربه )
2 هفته پیش

بله اعمال کنید ببینید نتیجه چی میشه.

استفاده از raw برای حالات خیلی خیلی پیچیده، بله میشه گفت بهتره ولی این شرایط خیلی کم پیش میاد. در کل ابزار ORM لاراول (Eloquent) بسیار کارآمده. من حتی در پروژه های غیر لاراولی هم از Eloquent استفاده می‌کنم.

برای ارسال پاسخ باید وارد سایت شوید