سرعت کم جست و جو در جدولی با بیش از یک میلیون رکورد

1 سال پیش توسط علی بیات آپدیت شد
آفلاین
user-avatar
حمیدرضا ( 13755 تجربه )
1 سال پیش
تخصص : برنامه نویس

لینک کوتاه اشتراک گذاری

0

با عرض سلام یه جدولی دارم یک میلیون رکورد داره و تعداد ستون ها آن هفت عدد هستش
کد سرچ بر اساس عملگر لایک هستش و با ایجکس سرچ میکنم به این صورت که بعد از تایپ حداقل سه کلمه میاد سرچ میکنه اما سرعت سرچ بسیار پایین هستش ؟ راه حل چی میتونه باشه ؟ ممنون از راهنمایتون
کد قسمت مدل :

public function scopeSearch($query , $keywords)
{
    $query->where('Huvudparagraf' , 'LIKE' , '%' . $keywords . '%')
        ->orWhere('Stycke1' , 'LIKE' , '%' . $keywords . '%')
        ->orWhere('Stycke2' , 'LIKE' , '%' . $keywords . '%')
        ->orWhere('Stycke3' , 'LIKE' , '%' . $keywords . '%')
        ->orWhere('Stycke4' , 'LIKE' , '%' . $keywords . '%')
        ->orWhere('Stycke5' , 'LIKE' , '%' . $keywords . '%')
        ->orWhere('Text' , 'LIKE' , '%' . $keywords . '%');
    return $query;
}

و اینم کد قسمت کنترلر :

  $keywords = request('keywords');
    $Laws = Law::search($keywords)->latest('id')->get();
آفلاین
user-avatar
mahdi khanzadi ( 97486 تجربه )
1 سال پیش
تخصص : کار آموز backend

لینک کوتاه اشتراک گذاری

0

از ترکیب کش + صف استفاده کنید.

۱− یک صف تنظیم کنید و محاسباتی که باید انجام بشه رو بزارید توی صف.
۲− هر دفعه که صف ران میشه و محاسبات رو انجام میده اون رو کش کنید.
۳− اپلیکیشن شما از مقدار داخل کش استفاده کنه که باعث میشه سرعتش بالاتر بره

صف و اپلیکیشن میتونن به صورت همروند کار کنن و روی همدیگه تاثیر چندانی ندارن.

آفلاین
user-avatar
smart ( 9235 تجربه )
1 سال پیش

لینک کوتاه اشتراک گذاری

0

سلام.
بنده دو پیشنهاد دارم که در کنار بقیه راه حل هایی که دوستان دادن میتونید استفاده کنید:

  1. از raw query استفاده کنید بجای eloquent.
  2. ستون هایی که میخواید توشون جستجو انجام بشه رو index گذاری کنید.
آنلاین
user-avatar
سیدعلی موسوی ( 120818 تجربه )
1 سال پیش
تخصص : سی شارپ و پی اچ پی

لینک کوتاه اشتراک گذاری

1

الستیک سرچ
http://vrgl.ir/G4muI

آفلاین
user-avatar
mahdi khanzadi ( 97486 تجربه )
1 سال پیش
تخصص : کار آموز backend

لینک کوتاه اشتراک گذاری

0

@juza66

الستیک سرچ کارش یه چیز دیگه هست. سرچ میکنه اما نه اینکه واسه یه چیز عادی بیایم ازش استفاده کنیم. واسه نون گرفتن که هواپیما روشن نمیکنن برن تا نونوایی

آفلاین
user-avatar
AriaieBOY ( 34442 تجربه )
1 سال پیش
تخصص : برنامه نویس تحت وب

لینک کوتاه اشتراک گذاری

1

من با حرف @khanzadimahdi موافق نیستم

اتفاقا محل استفاده از الستیک همینجاست شما میخواهید یک سرچ روی یک جدول با تعداد رکورد بالا بزنید و به صورت ایجکس و لایو نتایج به کاربر نشون بدید
الاستیک مخصوص همین کار هست.

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

آفلاین
user-avatar
mahdi khanzadi ( 97486 تجربه )
1 سال پیش
تخصص : کار آموز backend

لینک کوتاه اشتراک گذاری

0

@ariaieboy

پیشنهاد میکنم لینک زیر رو مطالعه کنید. همچنین پیاده سازی الاستیک سرچ باید به درستی انجام بشه وگرنه نتایج مختلفی بهتون میده که میتونه اشتباه باشه.

https://www.elastic.co/blog/found-uses-of-elasticsearch

لایو بودن و سرعت بالا ربطی به الاستیک سرچ نداره. همچنین تعداد رکورد بالا هم ربطی به الاستیک سرچ نداره. تمامی دیتابیس ها با رکورد بالا میتونن کار کنن. اما هر دیتابیسی برای کار خاصی ساخته شده.

آنلاین
user-avatar
سیدعلی موسوی ( 120818 تجربه )
1 سال پیش
تخصص : سی شارپ و پی اچ پی

لینک کوتاه اشتراک گذاری

1

@khanzadimahdi
این روش دوستمون عادی نیست داره چندین کوئری روی داده هاش اعمال میکنه و شاید هم بخواد بیشترش کنه یا جستجو رو پیشرفته ترش کنه، داده هاش هم یک میلیون هست و شاید هم بیشتر بشه .
وقتی منابع سرور کافی در دست نداری بهترین روش استفاده از این سرچ انجین هست.

آفلاین
user-avatar
AriaieBOY ( 34442 تجربه )
1 سال پیش
تخصص : برنامه نویس تحت وب

لینک کوتاه اشتراک گذاری

0

@khanzadimahdi

Elasticsearch is used for a lot of different use cases: "classical" full text search, analytics store, auto completer, spell checker, alerting engine, and as a general purpose document store. This article gives a brief overview of different common uses and important things to consider, with pointers to where you can learn more about them.

It surprises many that simple searching is among the least resource intensive tasks you can ask of Elasticsearch. If all you require is the top ten results for a regular, non-fuzzy match query, you can sustain hundreds of searches per second on collections of tens of millions of documents on inexpensive hardware. However, when you add fuzzy searching or faceted navigation to the list of requirements, the CPU and memory needs increase a lot.

همین دوتا پاراگراف از لینکی که دادید فکر کنم جواب بده که الستیک خیلی خوب میتونه انواع سرچ که سرچ ساده هم جزوش هست را با بهترین نحو انجام بده.
و فکر نکنم بتونید با mysql صدها فول تکست سرچ روی ده ها میلیون رکورد با کمترین سخت افزار و با بهترین سرعت انجام بدید.

آفلاین
user-avatar
AriaieBOY ( 34442 تجربه )
1 سال پیش
تخصص : برنامه نویس تحت وب

لینک کوتاه اشتراک گذاری

1

@juza66
دقیقا حرف شما درسته
اصلا یکی از کاربرد های الستیک هم همینه که روی داده های مختلف بیاد کوئری را به بهترین حالت و با کمترین میزان مصرف سخت افزار انجام بده.
حالا نمیدونم دیگه چرا ایشون میگن الستیک بدرد کار ایشون نمیخوره

آنلاین
user-avatar
سیدعلی موسوی ( 120818 تجربه )
1 سال پیش
تخصص : سی شارپ و پی اچ پی

لینک کوتاه اشتراک گذاری

0

@ariaieboy
واقعا نمیدونم چرا اینقدر اصرار دارن که الستیک سرچ برای کار دوستمون مناسب نیست :))))))

آفلاین
user-avatar
mahdi khanzadi ( 97486 تجربه )
1 سال پیش
تخصص : کار آموز backend

لینک کوتاه اشتراک گذاری

0

@juza66
@ariaieboy
ایشون میخواد یه سرچ ساده بزنه روی دیتابیس. نمیخواد کار دیگه ای انجام بده. شما واسه یه سرچ ساده کلا یه تکنولوژی جدید که پروژه اظافه میکنی؟ یا اینکه با همین چیزایی که داری بهینه تر میکنی کاراتو؟

الاستیک سرچ واسه سرچ زدن هست نه اینکه بخوای یه کوئری ساده ران کنی. سرچ زدن انواع مختلفی از الگوریتم ها داره و روش های مختلفی داره اما چیزی که اینجا میخوایم انجامش بدیم یه چیز کاملا تکراری هست. همین رو اگه با الاستیک سرچ هم انجام بدین سرعتش بازم تفاوت چندانی نمیکنه میتونید تست کنید.

و اینکه اگه بخواد از الاستیک استفاده کنه باید کل اون یک میلیون رکورد رو توی الاستیک سرچ هم وارد کنه. به نظر شما از لحاظ عقلانی کار درستیه؟ واسه یه کوئری ساده دوتا دیتابیس داشته باشید یکی الاستیک و یکی دیتابیس اصلی که همین یه کوئری رو بتونید ران کنید!

آفلاین
user-avatar
علی بیات ( 419779 تجربه )
1 سال پیش
تخصص : توسعه دهنده ارشد وب

لینک کوتاه اشتراک گذاری

0

روشی که @khanzadimahdi میگند، کاملا بهینه هست و بار رو از روی سرور بر میداره...

استفاده از یه دیتابیس جدا، تنها برای سرچ گزینه چندان خوبی نیست
اگر به جستجوی سریع احتیاج دارید.. میتونید سرویس الگولیا رو هم بررسی کنید
https://www.algolia.com/

برای ارسال پاسخ لازم است، ابتدا وارد سایت شوید.