smart
5 سال پیش توسط smart مطرح شد
5 پاسخ

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

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

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


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

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


smart
@smartgarden2016 5 سال پیش مطرح شد
0

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


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

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


smart
@smartgarden2016 5 سال پیش مطرح شد
0

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


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

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

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


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

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