وقت بخیر دوستان. من توی یه پروژه برای بخش ******** مجبور شدم یه فیلتر پیچیده بنویسم که حدود 300 خط شد. از متدهای whereHas, whereIn , where , if, ... خیلی زیاد استفاده کردم.******** هم به این صورته که یه جدول event داریم و یه جدول event metadata که مربوط به داده های تکمیلی رخدادها هستش و یه جدول time که مربطو به زمان های رخداد هست که من بر اساس ستون های این جدول ها ******** رو انجام دادم. تا الان همه چیز خوب پیش رفته و مشکلی نبوده. تا حدود 200-300 هزار رکورد که توی دیتابیس بوده هم مشکلی نبود.
مشکل از اونجا شروع شد که تعداد رکوردها زیاد شد مثلا حدود 500هزار رکورد شدن و کم کم زمان فیترینگ زیاد شد مثلا 2 یا 3 ثانیه طول میکشه و خب طبیعتا به چند میلیون رکورد که برسه دیگه نمیشه از ******** استفاده کرد!
میخوام ببینم چه راه حل هایی هست که این زمان خیلی خیلی کم بشه در حد صدم ثانیه ؟
مثلا یه سایتی مثل دیوار با اینکه ده ها میلیون آگهی داره ولی بخش فیلترینگش در حد صدم ثانیه هست!
چطور میشه به این کارایی رسید؟
به جز تعداد رکوردها ، کوئری هایی هم که مینویسید باید بهینه باشند...
مقاله زیر رو بررسی کنید:
https://m.dotdev.co/writing-advanced-eloquent-search-query-filters-de8b6c2598db
تقریبا به همی شکل نوشتم ولی اون refactor های آخر رو انجام ندادم ولی خب حس میکنم سرعت باید بهتر باشه ...
ممنونم به هرحال
شاید پاسخ شما همینجا باشد
پس اعمالشو کنم ببینم چطور میشه. یه سوال دیگه اینکه من چندجا خوندم که ظاهرا توی حجم دیتای بالا استفاده از DB::raw بهتر از eloquent هستش. درسته ؟؟