وقت بخیر دوستان. من توی یه پروژه برای بخش ******** مجبور شدم یه فیلتر پیچیده بنویسم که حدود 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 های آخر رو انجام ندادم ولی خب حس میکنم سرعت باید بهتر باشه ...
ممنونم به هرحال
همین refactor ها هر چند ممکنه زیاد به چشم نیاند اما توی تعداد کوئری های بالا کاملا اثرشون دیده میشه.
پس اعمالشو کنم ببینم چطور میشه. یه سوال دیگه اینکه من چندجا خوندم که ظاهرا توی حجم دیتای بالا استفاده از DB::raw بهتر از eloquent هستش. درسته ؟؟
بله اعمال کنید ببینید نتیجه چی میشه.
استفاده از raw برای حالات خیلی خیلی پیچیده، بله میشه گفت بهتره ولی این شرایط خیلی کم پیش میاد. در کل ابزار ORM لاراول (Eloquent) بسیار کارآمده. من حتی در پروژه های غیر لاراولی هم از Eloquent استفاده میکنم.
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟